HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    chatrandom怎么用(chatrandomplus)

    发布时间:2023-03-19 06:55:58     稿源: 创意岭    阅读: 116        问大家

    大家好!今天让创意岭的小编来大家介绍下关于chatrandom怎么用的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    本文目录:

    chatrandom怎么用(chatrandomplus)

    一、魔兽世界各种宏命令对应的中文解释!

    宏命令全教程+WOW各种命令使用大全(转,整)

    一:基础教程

    1.什么是宏命令?

    玩过EQ的都知道一点宏的知识,比如组队时用来告诉队友你的行动,告诉目标等。最简单的比如puller 常用的: /v %t过来了,大家集中火力。 法师常用的: /v 我要催眠%t,大家不要打醒他 这些宏个性鲜明,是EQ的一大乐趣之一。

    然而EQ毕竟是N年前的游戏,宏也比较简单,和它比起来。WOW的宏就复杂和强大的多了。它的函数就有上千种,如果都掌握,能实现许多匪夷所思的功能。

    一个宏可以完成一个相对比较复杂的命令.比如战斗中发布命令,如果打字当然不算麻烦,但在战斗中却很要命.浪费了时间和生命.一个简单的宏便可以用一个键来完成这一切.

    2.宏命令的设置流程:

    首先,回车,再敲/MACRO。看见了吧?会弹出一个窗口,上面有New(新建宏命令)和Complete(完成宏命令)两个按键。点New,又会弹出一个窗口,哇,花花绿绿的,里面包括了WOW几乎所有的技能图标,随你喜欢,随便选一个!它就是你设置的宏命令的图标了,给它取个名字吧!方便你用的时候好找。然后回到第一个窗口,在它上面有一个输入菜单(别告诉我找不到…它可是占了这个窗口的一半多…)在里面输入特定的内容,然后点Complete。接下来你要做的就是把这个代表你宏命令的图标用鼠标左键拉到快捷栏里,想怎么用就怎么用…

    3.下面就是怎样设置宏的内容了,简单的设置大家可以看我们网站上"基础"篇的宏介绍.

    相信很多人都知道WOW中的斜杠"/"和表情命令.宏可以将这些命令按照自己对条件的设置串联起来,比如:/Kneel是让你跪下来的动作而/say就是最基础的对话动作

    我们现在用一个宏把他们串起来:

    第一行内容:“/Kneel”

    第二行内容:“/say 如果你不嫁给我,那么我就一辈子不起来…” ”

    这样你的人物就会先下跪再说:"如果你不嫁给我,那么我就一辈子不起来…"

    宏可以应用所有WOW中已经定义了的斜杠"/"和表情命令,更要命的是,宏甚至可以应用人物的魔法和技能,

    只需要在宏的定义过程中应用"/cast"命令,下面是已知的一些常用命令:

    /Assist 这是个援助进攻的命令。当你的队伍同时面对几个敌人时,只要点击自己的队友(一般是队伍中的战士),然后使用这个命令,你的目标就会变成战士所选中的目标。大家集中火力消灭一个起!

    /Cast 这是个使用技能的命令。当你在宏命令里输入/Cast 技能名(技能等级)或者只要按住Shift同时用鼠标点击一下你想要输入的技能的图标。例如当你是一个战士,想制作一个使用战斗怒吼的宏时,你可以输入/Cast Battle Shout(Rank 1)或者是直接按住Shift点击Battle Shout这个技能的图标。当然你可以在一个宏的不同行上输入几个技能,那么当你使用这个宏时,几个技能就会一起释放出来,再用不着你像章鱼一样同时按下几个键了 。

    %t 这个符号也许会经常出现在你的宏命令里,它是一个代码,代表你当前所选中的人名。例如,你在宏里写下这么一句。(注意:后面要加一空格。) “/g %t ,今天天气真好,有没兴趣和我一起上山采蘑菇…”

    如果你点中一位名叫苯笨的玩家,那么当你按下这个宏时,你就会说:“笨笨,今天天气真好,有没兴趣和我一起上山采蘑菇…”

    /Target 这是一个自动选择目标的命令,你可以在宏里输入/Target (xxx),那么当你按下这个宏时,你将自动选定这个叫xxx的目标。

    /in 这是一个延时命令,时间以秒为单位.同时它不支持攻击指令.格式:/in 3 dance 三秒后跳舞,如/in 3 dance,就是在3秒后跳舞,

    /say start!

    /in 3 say 3s later

    /in 6 say 6s later

    二:进阶教程

    一些有用的 Macro

    1。允许你在窗口和全屏状态之间切换

    /script SetCVar("gxWindow", 1 - GetCVar("gxWindow"));

    /console gxRestart

    2。对于法师,必须要有的:将“X”换为你目前的变形术等级(下同);用它替换掉变形术技能。当你在队伍之外时使用它会得到“你不在队伍中。”的信息,但在队伍中的时候其它同伴会了解到你将释放的变形术目标。

    /p Sheeping >>> %t <<<

    /cast Polymorph (Rank X)

    3。作为一个术士,这是在队伍中使用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击,跟着一个虚弱诅咒。

    /assist 队伍中的拖怪手或者坦克的名字

    /script PetAttack();

    /cast Curse of Weakness (Rank X)

    4。从背包和袋子里切换身上的武器

    /script if ( not CursorHasItem() ) then PickupContainerItem(, );

    PickupInventoryItem( ); end

    bag# - 使用哪一个袋子的物品(0、1、2、3、4。0是背包)

    slot# - 袋子里的位置(从0至左上)

    equip# - 16 是主要武器, 17 是副武器

    5。这个宏治疗队伍里你指定的人,如果你不在队伍中它会治疗你自己。然后会自动将目标切换回你最后一个敌人。它同时还会使用队聊提醒队友你会治疗哪一个人。

    /script if (UnitName("target") ~=nil and UnitIsFriend("player","target")) then

    CastSpellByName("Heal(Rank X)") SendChatMessage("Incoming Heal to %T", "arty") else

    TargetUnit("player") CastSpellByName("Heal(Rank X)") TargetLastEnemy(); end

    6。加速任务显示速度

    /script QUEST_DEscriptION_GRADIENT_CPS = 600000

    /script RegisterForSave("QUEST_DEscriptION_GRADIENT_CPS")

    /script DEFAULT_CHAT_FRAME:AddMessage("quest text will scroll faster now");

    7。消除等待接受任务的时间

    /script AcceptQuest()

    8。这个宏可以在路上自动护送玩家做任务。

    /assist [player name]

    /cast 法术(Rank X)

    /target [player name]

    /follow [player name]

    9。切换主副武器,详情看第四条

    /script PickupInventoryItem(16); PickupInventoryItem(17);

    10。在没有目标或者目标是敌人的时候给自己加增益魔法或治疗。

    CastSpellByName("Spell Name(Rank X)");

    if ((SpellIsTargeting()) and (not UnitIsFriend("player","target")))

    then

    SpellTargetUnit("player");

    end;

    TargetLastEnemy();

    11。切换双手武器与单手+盾或者双手挥舞武器

    /script PickupInventoryItem(17);if(CursorHasItem()) then PickupContainerItem

    (4,2)ickupContainerItem(4,1)ickupInventoryItem(16);else PickupContainerItem

    (4,1)ickupInventoryItem(16)ickupContainerItem(4,2)ickupInventoryItem(17);end

    12。设定“真实鼠标视野”

    /script CameraOrSelectOrMoveStart(arg1);

    想取消就再次输入。

    13。切换近程技能栏和远程技能栏

    /script CURRENT_ACTIONBAR_PAGE = 2;

    /script ChangeActionBarPage();

    /cast aspectofmon key (just use the left click)

    /script CURRENT_ACTIONBAR_PAGE = 1;

    /script ChangeActionBarPage();

    /cast aspectofhawk (just use the left click)

    14。牧师对队友的一键加血,比如一号键给第一队友加血,二号键给第二队友加血,免除了还要鼠标确

    定目标的操作。依次类推,从第一个人到最后一个

    给队友1加血:

    /script TargetUnit(GetPartyMember(1))

    CastSpellByName(Heal(Rank X)) TargetLastEnemy()

    给队友2加血:

    /script TargetUnit(GetPartyMember(2)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()

    给队友3加血:

    /script TargetUnit(GetPartyMember(3)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()

    15。一键解决喂养宠物:这个宏会从最左边的袋子里的第一个位置拿出食物喂养宠物,如果所在的位置

    没有食物,它会自动打开袋子。

    /script if (not PlayerFrame.inCombat) then if (not GetContainerItemLink(4, 1)) then

    OpenBag(4); else CastSpellByName("Feed Pet"); PickupContainerItem(4, 1); end end

    16。术士宏

    1)如果目标生命大于20,释放抽取生命法术,否则使用灵魂抽取。

    /script if (UnitHealth("target")>20) then CastSpellByName("Drain Life(Rank X)") else

    CastSpellByName("Drain Soul(Rank 2)") end;

    2)虚弱诅咒版本

    /script if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues(Rank X)") else

    CastSpellByName("Curse of Weakness(Rank X)") end;

    17.先治疗自己,然后自动选中上次的敌人

    /target Pugar //选择自己,假设自己的名字是Pugar

    /cast Lesser Heal (Rank 1) //施展次级治疗rank1

    /script TargetLastEnemy(); //重新选择刚刚选择的敌人

    /script AttackTarget(); //攻击,等同于右键点击敌人

    18.对于一个术士很有用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击

    ,跟着一个虚弱诅咒。

    /assist 队伍中的拖怪手或者坦克的名字

    /script PetAttack();

    /cast Curse of Weakness (Rank X)

    19.等治疗完之后提醒别人注意下自己有可能被怪打,不加延时的话,就没这个效果了。

    /p healing %T, need 3s, don"t run away

    /cast heal (rank 1)

    /in 4 p cured %T 300HP,please notice the enemies turn on me^_^

    20.在路上自动护送朋友做任务。

    /assist [player name]

    /cast 法术(Rank X)

    /target [player name]

    /follow [player name]

    三:高级教程

    WOW的宏函数库可以去这两个地方查:

    http://www.cosmosui.org/texts/BlizzardCommands.xml

    http://www.wowwiki.com/index.php/World_of_Warcraft_API

    函数的使用比较简单,学习过编程的都比较容易上手,基本的用法是在函数前加/script 来使用。比如

    /script CURRENT_ACTIONBAR_PAGE = X;

    /script ChangeActionBarPage();

    就是将你的快捷栏翻到第X页。

    函数库中有许多函数都是非常有用和方便的,比如一次打开所有包包:

    /script OpenAllBags();

    配合关闭包包的函数,一次关闭所有包的宏也可以实现:

    /script CloseBag(0);

    /script CloseBag(1);

    /script CloseBag(2);

    /script CloseBag(3);

    /script CloseBag(4);

    怎么样,下次你卖东西的时候不会一个个开包关包了吧?

    使用函数还不是最恐怖的,恐怖的是WOW的宏是可以用条件判断的,看下面这两个:

    /script if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip(Rank 2)"); else if (

    UnitMana("player") >= 40 ) then CastSpellByName("Rake(Rank 1)"); end end

    据说这个包含if,then的宏可以让盗贼实现自动根据combo点数来使用技能(未测试),其中还使用了角

    色MANA值的调用,恐怖吧?还有这个查找spell的宏:

    function GetSpellIdByItsName(myWantedSpell, myWantedRank)

    local spellId = 1;

    local spellBook = "spell";

    local spellName, rankName;

    spellName, rankName = GetSpellName(spellId, spellBook);

    while (spellName ) do

    if ( ( spellName == myWantedSpell ) and ( ( not myWantedRank ) or ( rankName = myWantedRank

    ) ) ) then return spellId; end

    spellName, rankName = GetSpellName(spellId, spellBook);

    end

    return -1;

    end

    里面可以自己定义function,还使用了while,do这样的循环,是不是让你想到了N种应用的可能呢?

    遗憾的是,目前官方似乎没有提供延时的宏,所以在战斗中使用多种有延时的技能是无法实现的(无延时的技能可以实现同时使用),类似换其他武器-使用技能或法术-换回武器这样的功能也无法实现,

    (所谓用宏实现剑盾战士换双手武器MS再换回来是行不通的),不过使用COSMOS的朋友可以用/in 来实现非战斗指令的延时,比如

    /in 3 say hi 就会在3秒后说句hi。

    /in 6 /script MoveForwardStart(arg1);

    就会在6秒后向前跑。

    虽然法术和技能无法用/in指令来延时,但这样已经很强大了,比如,你可以编出各种运动的宏,如兜后,转身等。PVP时估计是必不可少的。

    下面是一个玩家写的双手武器战士自动逃跑的宏:

    /script UseContainerItem(0, 2);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown

    (12);ActionButtonUp(12);

    /cast Thunder Clap(Rank 1);

    /script TurnLeftStart(arg1);

    /in 1 /script TurnLeftStop(arg1);ToggleAutoRun();

    使用这个宏的条件:在大包包第二格放了回复药,快捷栏第11,12分别是一单手一盾的快捷方式。

    使用这个宏后,角色自动喝回复药,装备上盾,使用Thunder Clap(这三个动作同时进行),向后转180度后开自动跑步键逃走。其中技能等可以根据需要自己改。怎么样,是不是很夸张啊,哈哈。

    还有一些有用的宏:

    切换装备,

    双手切换单手并换第二个快捷栏,快捷栏第11,12分别是一单手一盾的快捷方式

    /script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);

    /script CURRENT_ACTIONBAR_PAGE = 2;

    /script ChangeActionBarPage();

    单手切换双手并换回第一快捷栏,快捷栏12是一双手武器快捷方式

    /script ActionButtonDown(12);ActionButtonUp(12);

    /script CURRENT_ACTIONBAR_PAGE = 1;

    /script ChangeActionBarPage();

    几个简单的宏

    1. 对自己使用绷带

    /script TargetUnit("Player");

    /use Mageweave Bandage

    /script TargetLastEnemy();

    * 这里用的时 Mageweave Bandage ,你可以改成适合你自己的绷带名

    * use 是 Cosmos 支持的命令,你必须安装 Cosmos 才能使用这个宏,如果你没有 Cosmos,使用下面的宏(绷带必须放在主背包第一格)

    /script TargetUnit("Player");

    /script UseContainerItem(0,1);

    /script TargetLastEnemy();

    2. 对敌人的 Pet 使用技能

    /script TargetUnitsPet("target");

    /cast Blind

    /script TargetLastEnemy();

    * Blind 是技能名,你可以用自己的技能,这里用了盗贼的 Blind

    ** /script 是使用 脚本 的命令,可供使用的命令参考附件

    ** 可以用 Shift + 点击 技能书里图标的方式在宏中添加释放技能的命令

    ** 可以用 Shift + 点击 物品的方式在宏中添加物品名

    3. 打开所有背包

    /script OpenBag(0);

    /script OpenBag(1);

    /script OpenBag(2);

    /script OpenBag(3);

    /script OpenBag(4);

    打开所有背包,可能

    /script OpenAllBags()

    一样搞定

    热键Shift + B 也是可以的

    4.战士用,双手武器切换单手武器+盾:

    首先在快捷栏10、11、12(也就是0、 -、 =的位置)拖上双手武器、单手武器、盾的快捷方式;

    双手武器:

    /script ActionButtonDown(10);ActionButtonUp(10);

    单手武器+盾:

    /script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);

    以下命令全部中空格用下划线_来表示

    %后面的都是变量

    =各种命令分类收集=

    参数设置

    %t

    切换当前目标命令

    /target_%name

    /assist_%name

    /script_TargetLastEnemy();

    游戏动作

    /cast_%skillname(rank_%d)

    /f

    /script_UseAction(n%d, %d);

    设置延迟命令

    /pause_%d

    聊天常用命令

    /s_

    /p_

    /g_

    /raid_

    =应用部分说明=

    聊天部分命令我就省略了...重点说明游戏中实际关系到游戏操作的命令

    首先%t是指当前目标名称,%t大多是用在聊天中...比如:

    ...

    你好,%t

    我开始攻击%t,大家请注意...

    Pull

    /script TargetNearestEnemy();

    /p Pulling %t

    /script AttackTarget();

    /v inc

    Assist

    /assist %t

    /script AttackTarget();

    UsePoison

    /script UseContainerItem(bag,slot); PickupInventoryItem(16);

    UseContainerItem(bag,slot);

    PickupInventoryItem(17);

    /in 1740 /script DEFAULT_CHAT_FRAME:AddMessage("Poison wearing off in one minute")

    _________________________

    1. 常用指令

    2. 队长指令

    3. 聊天指令

    4. 聊天频道指令

    5. 公会指令

    6. 表情指令

    1. 常用指令

    /help

    列出常用指令帮助

    /assist [名字]

    协助你当前所选择的目标,或者指定的目标

    /cast spell

    施放指定的法术,可以包含法术的等级。比如: "/cast Slow Fall", "/cast Polymorph(Rank 2)"

    /afk [文字]

    开启AFK模式显示你要离开一会儿,再输一次/afk关闭AFK模式。

    /combatlog

    导出你的战斗信息到(wow目录)LogsPlayerCombatLog.txt 文件里。

    /dnd [文字]

    开启DND模式表示“请勿打扰”,再输一次/dnd关闭DND模式。

    /duel [名字]

    要求与你锁定的目标决斗,或者要求与指定的目标决斗。

    /yield

    (/forfeit) 在决斗时投降。

    /emote 文字

    (/em, /me) 表示接下来的文字是动作。

    /exit

    退出游戏。

    /follow

    (/f) 自动跟随当前目标。

    /ignore 名字

    忽略目标玩家。

    /inspect

    (/ins) 查看目标玩家的装备。

    /logout

    (/camp) 坐下并且登出。

    /macro

    打开宏设置界面。

    /macrohelp

    给出关于设置宏的帮助。

    /played

    显示你游戏人物的在线时间。

    /pvp

    在接下来的5分钟内开启PVP模式。

    /raid 文字

    (/r) 在RAID频道里说话。

    /random 数字 [数字2]

    (/rnd, /rand) 扔出一个从1到某个数字范围内的随机数字,或者是两个数字范围之间的随机数字。

    /remfriend 名字

    (/removefriend) 把一个好友从你的好友列表里去掉。

    /split 数量

    把一部分的钱平均分给你的队友。

    /target 名字

    (/tar) 从当前目标转向你所指定的玩家。

    /time

    显示当前游戏的服务器时间。

    /trade

    (/tr) 与当前选择的目标交易

    /who [文字[ 文字2...]] [数字[-数字2]] [r-"种族"] [c-"职业"] [z-"区域"] [g-"公会"]

    如果没有添加任何后缀的话,列出在当前区域与你等级相近的所有在线玩家。文字指定玩家的名字,公会,职业,种族或者所在的区域;数字表示指定列出玩家的等级范围。

    /bug

    提交出错报告。

    /suggest

    提交建议。

    /note 文字

    提交一条信息。

    /script LUA-command

    用于UI设计者。

    /console command

    用于一些游戏的内部指令,比如"gxrestart", "reloadui" and "quit".

    /console 设置名 [新设置]

    用于调整游戏设置。

    2.队长指令

    /invite [名字]

    (/inv) 邀请目标玩家到你的队伍里。

    /uninvite [名字]

    (/un) 从你的队伍里移除目标玩家。

    /ffa

    把掠夺方式设置成“自由掠夺”。

    /master [名字]

    指定目标玩家在“计划分配”的掠夺方式中担当分配者。

    /roundrobin

    把掠夺方式设置成”轮流掠夺“。

    3. 聊天指令

    /guild 文字

    (/g) 在公会频道内说话。

    /party 文字

    (/p) 在队伍频道内说话。

    /reply 文字

    (/r, R) 回复最后一个玩家给你的密语。

    /say 文字

    (/s) 跟周围的玩家说话。

    /yell 文字

    (/shout) 喊叫(比/say传的距离要远)

    /whisper 名字 信息

    (/w, /tell) 给目标玩家密语。

    播放一段声音!每种语音都有两到三种变化。而且你的角色不同,语音也不一样。

    /v help

    /v inc

    /v charge

    /v flee

    /v attack

    /v oom

    /v fol

    /v wait

    /v heal

    /v cheer

    /v fire

    /v rasp

    4. 聊天频道指令

    /chat

    (/chathelp) 列出聊天指令。

    /join 频道 [密码]

    (/chan, /channel) 加入(或者创建)一个特殊聊天频道。

    /leave 频道|#

    (/chatleave, /chatexit) 离开这个特殊聊天频道,或者离开指定号码的聊天频道。

    /# 文字

    (/c, /csay) 在聊天频道内说话,#表示所要说话的频道号码。

    /announcements 频道|#

    (/ann) 开启/关闭指定聊天频道的公告。

    /ban 频道|# 名字

    禁止目标玩家进入指定的频道。

    /unban 频道|# 名字

    解除目标玩家的禁令。

    /chatlist

    (/chatwho, /chatinfo) 列出所有的聊天频道和他们的号码。

    /chatinvite 频道|# 名字

    (/cinvite) 邀请目标玩家到一个指令的聊天频道里。

    /ckick 频道|# 名字

    把目标玩家从指定频道中踢出去。

    /moderator 频道|# 名字

    (/mod) 把目标玩家设成指定聊天频道的管理员。

    /unmoderator 频道|# 名字

    (/unmod) 解除目标玩家在指定聊天频道里的管理员身份。

    /moderate 频道|#

    开启指定聊天频道的管理模式。

    /mute 频道|# 名字

    (/squelch, /unvoice) 把目标玩家在指定的聊天频道里禁言。

    /unmute 频道|# 名字

    (/unsquelch, /voice) 解除目标玩家在指定的聊天频道里的禁言。

    /password 频道|# [密码]

    (/pass) 设置,改变或者去除聊天频道的密码。

    /owner 频道|# [名字]

    显示或者改变所建立的聊天频道名字。

    5. 公会指令

    /ginfo

    给出关于你的公会的基本信息。

    /g 文字

    (/guild) 在公会频道里说话

    /o 文字

    对所有公会里的管理员说话。

    /ginvite 名字

    (/guildinvite) 邀请目标玩家加入到你的公会里。

    /gremove 名字

    (/guildremove) 从你的公会里移除目标玩家。

    /gpromote 名字

    (/guildpromote) 提升在你公会里的目标玩家公会等级。

    /gdemote 名字

    (/guilddemote) 降低在你公会里的目标玩家公会等级。

    /gmotd 信息

    (/guildmotd) 设置今天的公会公告。

    /gquit

    (/guildquit) 离开你的公会。

    /groster

    (/guildroster) 给出整个公会成员的列表(只限管理员和会长使用)。

    /gleader name

    (/guildleader) 把目标玩家设为会长(只限会长使用)。

    /gdisband

    (/guilddisband) 解散公会(只限会长使用)。

    我的答案字数太多。我只好删减了点~

    呵呵。玩WOW的都是朋友!

    二、魔兽世界宏的问题 懂的进

    一:基础教程

    1.什么是宏命令?

    玩过EQ的都知道一点宏的知识,比如组队时用来告诉队友你的行动,告诉目标等。最简单的比如puller 常用的: /v %t过来了,大家集中火力。 法师常用的: /v 我要催眠%t,大家不要打醒他 这些宏个性鲜明,是EQ的一大乐趣之一。

    然而EQ毕竟是N年前的游戏,宏也比较简单,和它比起来。WOW的宏就复杂和强大的多了。它的函数就有上千种,如果都掌握,能实现许多匪夷所思的功能。

    一个宏可以完成一个相对比较复杂的命令.比如战斗中发布命令,如果打字当然不算麻烦,但在战斗中却很要命.浪费了时间和生命.一个简单的宏便可以用一个键来完成这一切.

    2.宏命令的设置流程:

    首先,回车,再敲/MACRO。看见了吧?会弹出一个窗口,上面有New(新建宏命令)和Complete(完成宏命令)两个按键。点New,又会弹出一个窗口,哇,花花绿绿的,里面包括了WOW几乎所有的技能图标,随你喜欢,随便选一个!它就是你设置的宏命令的图标了,给它取个名字吧!方便你用的时候好找。然后回到第一个窗口,在它上面有一个输入菜单(别告诉我找不到…它可是占了这个窗口的一半多…)在里面输入特定的内容,然后点Complete。接下来你要做的就是把这个代表你宏命令的图标用鼠标左键拉到快捷栏里,想怎么用就怎么用…

    3.下面就是怎样设置宏的内容了,简单的设置大家可以看我们网站上'基础'篇的宏介绍.

    相信很多人都知道WOW中的斜杠'/'和表情命令.宏可以将这些命令按照自己对条件的设置串联起来,比如:/Kneel是让你跪下来的动作而/say就是最基础的对话动作

    我们现在用一个宏把他们串起来:

    第一行内容:“/Kneel”

    第二行内容:“/say 如果你不嫁给我,那么我就一辈子不起来…” ”

    这样你的人物就会先下跪再说:'如果你不嫁给我,那么我就一辈子不起来…'

    宏可以应用所有WOW中已经定义了的斜杠'/'和表情命令,更要命的是,宏甚至可以应用人物的魔法和技能,

    只需要在宏的定义过程中应用'/cast'命令,下面是已知的一些常用命令:

    /Assist 这是个援助进攻的命令。当你的队伍同时面对几个敌人时,只要点击自己的队友(一般是队伍中的战士),然后使用这个命令,你的目标就会变成战士所选中的目标。大家集中火力消灭一个起!

    /Cast 这是个使用技能的命令。当你在宏命令里输入/Cast 技能名(技能等级)或者只要按住Shift同时用鼠标点击一下你想要输入的技能的图标。例如当你是一个战士,想制作一个使用战斗怒吼的宏时,你可以输入/Cast Battle Shout(Rank 1)或者是直接按住Shift点击Battle Shout这个技能的图标。当然你可以在一个宏的不同行上输入几个技能,那么当你使用这个宏时,几个技能就会一起释放出来,再用不着你像章鱼一样同时按下几个键了 。

    %t 这个符号也许会经常出现在你的宏命令里,它是一个代码,代表你当前所选中的人名。例如,你在宏里写下这么一句。(注意:后面要加一空格。) “/g %t ,今天天气真好,有没兴趣和我一起上山采蘑菇…”

    如果你点中一位名叫苯笨的玩家,那么当你按下这个宏时,你就会说:“笨笨,今天天气真好,有没兴趣和我一起上山采蘑菇…”

    /Target 这是一个自动选择目标的命令,你可以在宏里输入/Target (xxx),那么当你按下这个宏时,你将自动选定这个叫xxx的目标。

    /in 这是一个延时命令,时间以秒为单位.同时它不支持攻击指令.格式:/in 3 dance 三秒后跳舞,如/in 3 dance,就是在3秒后跳舞,

    /say start!

    /in 3 say 3s later

    /in 6 say 6s later

    二:进阶教程

    一些有用的 Macro

    1。允许你在窗口和全屏状态之间切换

    /script SetCVar('gxWindow', 1 - GetCVar('gxWindow'));

    作者: 我想做斑竹 2006-1-9 17:52 回复此发言

    --------------------------------------------------------------------------------

    2 宏命令完全入门手册[申精]

    /console gxRestart

    2。对于法师,必须要有的:将“X”换为你目前的变形术等级(下同);用它替换掉变形术技能。当你在队伍之外时使用它会得到“你不在队伍中。”的信息,但在队伍中的时候其它同伴会了解到你将释放的变形术目标。

    /p Sheeping >>> %t <<<

    /cast Polymorph (Rank X)

    3。作为一个术士,这是在队伍中使用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击,跟着一个虚弱诅咒。

    /assist 队伍中的拖怪手或者坦克的名字

    /script PetAttack();

    /cast Curse of Weakness (Rank X)

    4。从背包和袋子里切换身上的武器

    /script if ( not CursorHasItem() ) then PickupContainerItem(, );

    PickupInventoryItem( ); end

    bag# - 使用哪一个袋子的物品(0、1、2、3、4。0是背包)

    slot# - 袋子里的位置(从0至左上)

    equip# - 16 是主要武器, 17 是副武器

    5。这个宏治疗队伍里你指定的人,如果你不在队伍中它会治疗你自己。然后会自动将目标切换回你最后一个敌人。它同时还会使用队聊提醒队友你会治疗哪一个人。

    /script if (UnitName('target') ~=nil and UnitIsFriend('player','target')) then

    CastSpellByName('Heal(Rank X)') SendChatMessage('Incoming Heal to %T', 'Party') else

    TargetUnit('player') CastSpellByName('Heal(Rank X)') TargetLastEnemy(); end

    6。加速任务显示速度

    /script QUEST_DEscriptION_GRADIENT_CPS = 600000

    /script RegisterForSave('QUEST_DEscriptION_GRADIENT_CPS')

    /script DEFAULT_CHAT_FRAME:AddMessage('quest text will scroll faster now');

    7。消除等待接受任务的时间

    /script AcceptQuest()

    8。这个宏可以在路上自动护送玩家做任务。

    /assist [player name]

    /cast 法术(Rank X)

    /target [player name]

    /follow [player name]

    9。切换主副武器,详情看第四条

    /script PickupInventoryItem(16); PickupInventoryItem(17);

    10。在没有目标或者目标是敌人的时候给自己加增益魔法或治疗。

    CastSpellByName('Spell Name(Rank X)');

    if ((SpellIsTargeting()) and (not UnitIsFriend('player','target')))

    then

    SpellTargetUnit('player');

    end;

    TargetLastEnemy();

    11。切换双手武器与单手+盾或者双手挥舞武器

    /script PickupInventoryItem(17);if(CursorHasItem()) then PickupContainerItem

    (4,2);PickupContainerItem(4,1);PickupInventoryItem(16);else PickupContainerItem

    (4,1);PickupInventoryItem(16);PickupContainerItem(4,2);PickupInventoryItem(17);end

    12。设定“真实鼠标视野”

    /script CameraOrSelectOrMoveStart(arg1);

    想取消就再次输入。

    13。切换近程技能栏和远程技能栏

    /script CURRENT_ACTIONBAR_PAGE = 2;

    /script ChangeActionBarPage();

    /cast aspectofmon key (just use the left click)

    /script CURRENT_ACTIONBAR_PAGE = 1;

    /script ChangeActionBarPage();

    /cast aspectofhawk (just use the left click)

    14。牧师对队友的一键加血,比如一号键给第一队友加血,二号键给第二队友加血,免除了还要鼠标确

    定目标的操作。依次类推,从第一个人到最后一个

    给队友1加血:

    /script TargetUnit(GetPartyMember(1))

    CastSpellByName(Heal(Rank X)) TargetLastEnemy()

    作者: 我想做斑竹 2006-1-9 17:52 回复此发言

    --------------------------------------------------------------------------------

    3 宏命令完全入门手册[申精]

    给队友2加血:

    /script TargetUnit(GetPartyMember(2)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()

    给队友3加血:

    /script TargetUnit(GetPartyMember(3)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()

    15。一键解决喂养宠物:这个宏会从最左边的袋子里的第一个位置拿出食物喂养宠物,如果所在的位置

    没有食物,它会自动打开袋子。

    /script if (not PlayerFrame.inCombat) then if (not GetContainerItemLink(4, 1)) then

    OpenBag(4); else CastSpellByName('Feed Pet'); PickupContainerItem(4, 1); end end

    16。术士宏

    1)如果目标生命大于20,释放抽取生命法术,否则使用灵魂抽取。

    /script if (UnitHealth('target')>20) then CastSpellByName('Drain Life(Rank X)') else

    CastSpellByName('Drain Soul(Rank 2)') end;

    2)虚弱诅咒版本

    /script if (UnitMana('target')>0) then CastSpellByName('Curse of Tongues(Rank X)') else

    CastSpellByName('Curse of Weakness(Rank X)') end;

    17.先治疗自己,然后自动选中上次的敌人

    /target Pugar //选择自己,假设自己的名字是Pugar

    /cast Lesser Heal (Rank 1) //施展次级治疗rank1

    /script TargetLastEnemy(); //重新选择刚刚选择的敌人

    /script AttackTarget(); //攻击,等同于右键点击敌人

    18.对于一个术士很有用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击

    ,跟着一个虚弱诅咒。

    /assist 队伍中的拖怪手或者坦克的名字

    /script PetAttack();

    /cast Curse of Weakness (Rank X)

    19.等治疗完之后提醒别人注意下自己有可能被怪打,不加延时的话,就没这个效果了。

    /p healing %T, need 3s, don't run away

    /cast heal (rank 1)

    /in 4 p cured %T 300HP,please notice the enemies turn on me^_^

    20.在路上自动护送朋友做任务。

    /assist [player name]

    /cast 法术(Rank X)

    /target [player name]

    /follow [player name]

    三:高级教程

    WOW的宏函数库可以去这两个地方查:

    http://www.cosmosui.org/texts/BlizzardCommands.xml

    http://www.wowwiki.com/index.php/World_of_Warcraft_API

    函数的使用比较简单,学习过编程的都比较容易上手,基本的用法是在函数前加/script 来使用。比如

    /script CURRENT_ACTIONBAR_PAGE = X;

    /script ChangeActionBarPage();

    就是将你的快捷栏翻到第X页。

    函数库中有许多函数都是非常有用和方便的,比如一次打开所有包包:

    /script OpenAllBags();

    配合关闭包包的函数,一次关闭所有包的宏也可以实现:

    /script CloseBag(0);

    /script CloseBag(1);

    /script CloseBag(2);

    /script CloseBag(3);

    /script CloseBag(4);

    怎么样,下次你卖东西的时候不会一个个开包关包了吧?

    使用函数还不是最恐怖的,恐怖的是WOW的宏是可以用条件判断的,看下面这两个:

    /script if ( GetComboPoints() >= 3 ) then CastSpellByName('Rip(Rank 2)'); else if (

    UnitMana('player') >= 40 ) then CastSpellByName('Rake(Rank 1)'); end end

    据说这个包含if,then的宏可以让盗贼实现自动根据combo点数来使用技能(未测试),其中还使用了角

    色MANA值的调用,恐怖吧?还有这个查找spell的宏:

    function GetSpellIdByItsName(myWantedSpell, myWantedRank)

    local spellId = 1;

    作者: 我想做斑竹 2006-1-9 17:52 回复此发言

    --------------------------------------------------------------------------------

    4 宏命令完全入门手册[申精]

    local spellBook = 'spell';

    local spellName, rankName;

    spellName, rankName = GetSpellName(spellId, spellBook);

    while (spellName ) do

    if ( ( spellName == myWantedSpell ) and ( ( not myWantedRank ) or ( rankName = myWantedRank

    ) ) ) then return spellId; end

    spellName, rankName = GetSpellName(spellId, spellBook);

    end

    return -1;

    end

    里面可以自己定义function,还使用了while,do这样的循环,是不是让你想到了N种应用的可能呢?

    遗憾的是,目前官方似乎没有提供延时的宏,所以在战斗中使用多种有延时的技能是无法实现的(无延时的技能可以实现同时使用),类似换其他武器-使用技能或法术-换回武器这样的功能也无法实现,

    (所谓用宏实现剑盾战士换双手武器MS再换回来是行不通的),不过使用COSMOS的朋友可以用/in 来实现非战斗指令的延时,比如

    /in 3 say hi 就会在3秒后说句hi。

    /in 6 /script MoveForwardStart(arg1);

    就会在6秒后向前跑。

    虽然法术和技能无法用/in指令来延时,但这样已经很强大了,比如,你可以编出各种运动的宏,如兜后,转身等。PVP时估计是必不可少的。

    下面是一个玩家写的双手武器战士自动逃跑的宏:

    /script UseContainerItem(0, 2);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown

    (12);ActionButtonUp(12);

    /cast Thunder Clap(Rank 1);

    /script TurnLeftStart(arg1);

    /in 1 /script TurnLeftStop(arg1);ToggleAutoRun();

    使用这个宏的条件:在大包包第二格放了回复药,快捷栏第11,12分别是一单手一盾的快捷方式。

    使用这个宏后,角色自动喝回复药,装备上盾,使用Thunder Clap(这三个动作同时进行),向后转180度后开自动跑步键逃走。其中技能等可以根据需要自己改。怎么样,是不是很夸张啊,哈哈。

    还有一些有用的宏:

    切换装备,

    双手切换单手并换第二个快捷栏,快捷栏第11,12分别是一单手一盾的快捷方式

    /script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);

    /script CURRENT_ACTIONBAR_PAGE = 2;

    /script ChangeActionBarPage();

    单手切换双手并换回第一快捷栏,快捷栏12是一双手武器快捷方式

    /script ActionButtonDown(12);ActionButtonUp(12);

    /script CURRENT_ACTIONBAR_PAGE = 1;

    /script ChangeActionBarPage();

    几个简单

    作者: 我想做斑竹 2006-1-9 17:52 回复此发言

    --------------------------------------------------------------------------------

    5 回复:宏命令完全入门手册[申精]

    为完 陆续跟心

    作者: 我想做斑竹 2006-1-9 17:54 回复此发言

    --------------------------------------------------------------------------------

    6 回复:宏命令完全入门手册[申精]

    1. 对自己使用绷带

    /use Mageweave Bandage

    /script TargetLastEnemy();

    * 这里用的时 Mageweave Bandage ,你可以改成适合你自己的绷带名

    * use 是 Cosmos 支持的命令,你必须安装 Cosmos 才能使用这个宏,如果你没有 Cosmos,使用下面的宏(绷带必须放在主背包第一格)

    /script TargetUnit('Player');

    /script UseContainerItem(0,1);

    /script TargetLastEnemy();

    2. 对敌人的 Pet 使用技能

    /script TargetUnitsPet('target');

    /cast Blind

    /script TargetLastEnemy();

    * Blind 是技能名,你可以用自己的技能,这里用了盗贼的 Blind (我是盗贼啦,呵呵)

    ** /script 是使用 脚本 的命令,可供使用的命令参考附件

    ** 可以用 Shift + 点击 技能书里图标的方式在宏中添加释放技能的命令

    ** 可以用 Shift + 点击 物品的方式在宏中添加物品名

    3. 打开所有背包

    /script OpenBag(0);

    /script OpenBag(1);

    /script OpenBag(2);

    /script OpenBag(3);

    /script OpenBag(4);

    打开所有背包,可能

    /script OpenAllBags()

    一样搞定:P

    热键Shift + B 也是可以的

    4.战士用,双手武器切换单手武器+盾:

    首先在快捷栏10、11、12(也就是0、 -、 =的位置)拖上双手武器、单手武器、盾的快捷方式;

    双手武器:

    /script ActionButtonDown(10);ActionButtonUp(10);

    单手武器+盾:

    /script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);

    以下命令全部中空格用下划线_来表示

    %后面的都是变量

    =各种命令分类收集=

    参数设置

    %t

    切换当前目标命令

    /target_%name

    /assist_%name

    /script_TargetLastEnemy();

    游戏动作

    /cast_%skillname(rank_%d)

    /f

    /script_UseAction(n%d, %d);

    设置延迟命令

    /pause_%d

    聊天常用命令

    /s_

    /p_

    /g_

    /raid_

    =应用部分说明=

    聊天部分命令我就省略了...重点说明游戏中实际关系到游戏操作的命令

    首先%t是指当前目标名称,%t大多是用在聊天中...比如:

    ...

    你好,%t

    我开始攻击%t,大家请注意...

    Pull

    /script TargetNearestEnemy();

    /p Pulling %t

    /script AttackTarget();

    /v inc

    Assist

    /assist %t

    /script AttackTarget();

    UsePoison

    /script UseContainerItem(bag,slot); PickupInventoryItem(16);

    UseContainerItem(bag,slot);

    PickupInventoryItem(17);

    /in 1740 /script DEFAULT_CHAT_FRAME:AddMessage('Poison wearing off in one minute')

    _________________________

    1. 常用指令

    2. 队长指令

    3. 聊天指令

    4. 聊天频道指令

    5. 公会指令

    6. 表情指令

    1. 常用指令

    /help

    列出常用指令帮助

    /assist [名字]

    协助你当前所选择的目标,或者指定的目标

    /cast spell

    施放指定的法术,可以包含法术的等级。比如: '/cast Slow Fall', '/cast Polymorph(Rank 2)'

    /afk [文字]

    开启AFK模式显示你要离开一会儿,再输一次/afk关闭AFK模式。

    /combatlog

    导出你的战斗信息到(wow目录)LogsPlayerCombatLog.txt 文件里。

    /dnd [文字]

    开启DND模式表示“请勿打扰”,再输一次/dnd关闭DND模式。

    /duel [名字]

    要求与你锁定的目标决斗,或者要求与指定的目标决斗。

    /yield

    (/forfeit) 在决斗时投降。

    /emote 文字

    (/em, /me) 表示接下来的文字是动作。

    /exit

    退出游戏。

    /follow

    (/f) 自动跟随当前目标。

    /ignore 名字

    忽略目标玩家。

    /inspect

    (/ins) 查看目标玩家的装备。

    /logout

    (/camp) 坐下并且登出。

    /macro

    打开宏设置界面。

    /macrohelp

    给出关于设置宏的帮助。

    /played

    显示你游戏人物的在线时间。

    /pvp

    在接下来的5分钟内开启PVP模式。

    作者: 我想做斑竹 2006-1-9 17:59 回复此发言

    --------------------------------------------------------------------------------

    7 回复:宏命令完全入门手册[申精]

    /raid 文字

    (/r) 在RAID频道里说话。

    /random 数字 [数字2]

    (/rnd, /rand) 扔出一个从1到某个数字范围内的随机数字,或者是两个数字范围之间的随机数字。

    /remfriend 名字

    (/removefriend) 把一个好友从你的好友列表里去掉。

    /split 数量

    把一部分的钱平均分给你的队友。

    /target 名字

    (/tar) 从当前目标转向你所指定的玩家。

    /time

    显示当前游戏的服务器时间。

    /trade

    (/tr) 与当前选择的目标交易

    /who [文字[ 文字2...]] [数字[-数字2]] [r-'种族'] [c-'职业'] [z-'区域'] [g-'公会']

    如果没有添加任何后缀的话,列出在当前区域与你等级相近的所有在线玩家。文字指定玩家的名字,公会,职业,种族或者所在的区域;数字表示指定列出玩家的等级范围。

    /bug

    提交出错报告。

    /suggest

    提交建议。

    /note 文字

    提交一条信息。

    /script LUA-command

    用于UI设计者。

    /console command

    用于一些游戏的内部指令,比如'gxrestart', 'reloadui' and 'quit'.

    /console 设置名 [新设置]

    用于调整游戏设置。

    2.队长指令

    /invite [名字]

    (/inv) 邀请目标玩家到你的队伍里。

    /uninvite [名字]

    (/un) 从你的队伍里移除目标玩家。

    /ffa

    把掠夺方式设置成“自由掠夺”。

    /master [名字]

    指定目标玩家在“计划分配”的掠夺方式中担当分配者。

    /roundrobin

    把掠夺方式设置成”轮流掠夺“。

    3. 聊天指令

    /guild 文字

    (/g) 在公会频道内说话。

    /party 文字

    (/p) 在队伍频道内说话。

    /reply 文字

    (/r, R) 回复最后一个玩家给你的密语。

    /say 文字

    (/s) 跟周围的玩家说话。

    /yell 文字

    (/shout) 喊叫(比/say传的距离要远)

    /whisper 名字 信息

    (/w, /tell) 给目标玩家密语。

    播放一段声音!每种语音都有两到三种变化。而且你的角色不同,语音也不一样。

    /v help

    /v inc

    /v charge

    /v flee

    /v attack

    /v oom

    /v fol

    /v wait

    /v heal

    /v cheer

    /v fire

    /v rasp

    4. 聊天频道指令

    /chat

    (/chathelp) 列出聊天指令。

    /join 频道 [密码]

    (/chan, /channel) 加入(或者创建)一个特殊聊天频道。

    /leave 频道|#

    (/chatleave, /chatexit) 离开这个特殊聊天频道,或者离开指定号码的聊天频道。

    /# 文字

    (/c, /csay) 在聊天频道内说话,#表示所要说话的频道号码。

    /announcements 频道|#

    (/ann) 开启/关闭指定聊天频道的公告。

    /ban 频道|# 名字

    禁止目标玩家进入指定的频道。

    /unban 频道|# 名字

    解除目标玩家的禁令。

    /chatlist

    (/chatwho, /chatinfo) 列出所有的聊天频道和他们的号码。

    /chatinvite 频道|# 名字

    (/cinvite) 邀请目标玩家到一个指令的聊天频道里。

    /ckick 频道|# 名字

    把目标玩家从指定频道中踢出去。

    /moderator 频道|# 名字

    (/mod) 把目标玩家设成指定聊天频道的管理员。

    /unmoderator 频道|# 名字

    (/unmod) 解除目标玩家在指定聊天频道里的管理员身份。

    /moderate 频道|#

    开启指定聊天频道的管理模式。

    /mute 频道|# 名字

    (/squelch, /unvoice) 把目标玩家在指定的聊天频道里禁言。

    /unmute 频道|# 名字

    (/unsquelch, /voice) 解除目标玩家在指定的聊天频道里的禁言。

    /password 频道|# [密码]

    (/pass) 设置,改变或者去除聊天频道的密码。

    /owner 频道|# [名字]

    显示或者改变所建立的聊天频道名字。

    5. 公会指令

    /ginfo

    给出关于你的公会的基本信息。

    /g 文字

    (/guild) 在公会频道里说话

    /o 文字

    对所有公会里的管理员说话。

    /ginvite 名字

    (/guildinvite) 邀请目标玩家加入到你的公会里。

    /gremove 名字

    (/guildremove) 从你的公会里移除目标玩家。

    /gpromote 名字

    (/guildpromote) 提升在你公会里的目标玩家公会等级。

    作者: 我想做斑竹 2006-1-9 17:59 回复此发言

    --------------------------------------------------------------------------------

    8 回复:宏命令完全入门手册[申精]

    /gdemote 名字

    (/guilddemote) 降低在你公会里的目标玩家公会等级。

    /gmotd 信息

    (/guildmotd) 设置今天的公会公告。

    /gquit

    (/guildquit) 离开你的公会。

    /groster

    (/guildroster) 给出整个公会成员的列表(只限管理员和会长使用)。

    /gleader name

    (/guildleader) 把目标玩家设为会长(只限会长使用)。

    /gdisband

    (/guilddisband) 解散公会(只限会长使用)。

    三、android wifip2p怎么用

    为了使用Wi-Fi P2P,要在你的清单文件中添加 CHANGE_WIFI_STATE 、 ACCESS_WIFI_STATE 、和 INTERNET 权限。即使Wi-FiP2P不要求互联网连接,但它要使用标准的Java套接字,并且Android在使用这些套接字时要求申请这些权限,因此要在清单中申请INTERNET权限。

    <manifestxmlns:android="http //schemas android com/apk/res/android" package="com.example.android.nsdchat"

    ...

    <uses-permission

    android:required="true"

    android:name="android.permission.ACCESS_WIFI_STATE"/>

    <uses-permission

    android:required="true"

    android:name="android.permission.CHANGE_WIFI_STATE"/>

    <uses-permission

    android:required="true"

    android:name="android.permission.INTERNET"/>

    ...

    添加本地服务

    如果你要提供一个本地服务,那么就需要把这个服务注册为可发现的。本地服务被注册后,框架就会自动的响应来自对等点的服务发现请求。

    以下是创建本地服务的步骤:

    1. 创建一个 WifiP2pServiceInfo 对象;

    2. 填入你的服务相关的信息;

    3. 调用addLocalService()方法来注册本地服务,让其可发现。

    private void startRegistration () { // Create a string map containing information about your service.

    Map record = new HashMap();

    record.put("listenport", String.valueOf(SERVER_PORT));

    record.put("buddyname", "John Doe" + (int) (Math.random() * 1000));

    record.put("available", "visible");

    // Serviceinformation. Pass it an instance name, service type

    //_protocol._transportlayer , and the map containing

    //information other devices will want once they connect to this one.

    WifiP2pDnsSdServiceInfo serviceInfo =

    WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);

    // Add thelocal service, sending the service info, network channel,

    // andlistener that will be used to indicate success or failure of

    // therequest.

    mManager.addLocalService(channel, serviceInfo, new ActionListener() {

    @Override

    public void onSuccess() {

    // Command successful! Code isn't necessarily needed here,

    // Unless you want to update the UI or add logging statements.

    }

    @Override

    public void onFailure(int arg0) {

    // Command failed. Check for P2P_UNSUPPORTED, ERROR, or BUSY

    }

    });

    }

    发现附近的服务

    Android使用回调方法来通知你的应用程序可用的服务,因此首先要做的就是要建立回调方法。创建一个 WifiP2pManager.DnsSdTxtRecordListener 对象来监听传入的记录。这个记录可以是其他设备的任意广播。当一个记录进入时,你可以把设备地址和其他你想要的其他相关信息复制到当前方法外部的数据结构中,以便后续可以访问它。下面的例子假设记录中包含一个“buddyname”字段,它带有用户的标识。

    final HashMap < String , String > buddies = new HashMap < String , String >(); ...

    private void discoverService() {

    DnsSdTxtRecordListener txtListener = new DnsSdTxtRecordListener() {

    @Override

    /* Callbackincludes:

    * fullDomain: full domainname: e.g "printer._ipp._tcp.local."

    * record: TXT record dta as amap of key/value pairs.

    * device: The device runningthe advertised service.

    */

    public voidonDnsSdTxtRecordAvailable(

    String fullDomain, Map record, WifiP2pDevice device) {

    Log.d(TAG, "DnsSdTxtRecord available -" + record.toString());

    buddies.put(device.deviceAddress, record.get("buddyname"));

    }

    };

    ...

    }

    实现一个 WifiP2pManager.DnsSdServiceResponseListener 接口,来获取服务信息。这个接口会接收实际的描述和连接信息。上面的代码中使用了 Map 对象把设备地址和用户标识组成一对。服务响应监听器使用这个接口把DNS记录和对应的服务信息连接到一起。实现上述两个监听器后,使用 setDnsSdResponseListener() 方法把它们添加给 WifiP2pManager 对象。

    private void discoverService () { ...

    DnsSdServiceResponseListener servListener = new DnsSdServiceResponseListener() {

    @Override

    public voidonDnsSdServiceAvailable(String instanceName, String registrationType,

    WifiP2pDevice resourceType) {

    // Update the device name with the human-friendly version from

    // the DnsTxtRecord, assuming one arrived.

    resourceType.deviceName = buddies

    .containsKey(resourceType.deviceAddress) ? buddies

    .get(resourceType.deviceAddress) : resourceType.deviceName;

    // Add to the custom adapter defined specifically for showing

    // wifi devices.

    WiFiDirectServicesList fragment = (WiFiDirectServicesList)getFragmentManager()

    .findFragmentById(R.id.frag_peerlist);

    WiFiDevicesAdapter adapter = ((WiFiDevicesAdapter)fragment

    .getListAdapter());

    adapter.add(resourceType);

    adapter.notifyDataSetChanged();

    Log.d(TAG, "onBonjourServiceAvailable " + instanceName);

    }

    };

    mManager.setDnsSdResponseListeners(channel, servListener, txtListener);

    ...

    }

    现在创建一个服务请求并调用 addServiceRequest() 方法,这个方法也需要一个监听器来包括成功或失败。

    serviceRequest = WifiP2pDnsSdServiceRequest . newInstance (); mManager .addServiceRequest(channel,

    serviceRequest,

    new ActionListener() {

    @Override

    public void onSuccess() {

    // Success!

    }

    @Override

    public void onFailure(int code) {

    // Command failed. Check forP2P_UNSUPPORTED, ERROR, or BUSY

    }

    });

    最后,调用的 discoverServices() 方法。

    mManager . discoverServices ( channel , new ActionListener () { @Override

    public void onSuccess() {

    // Success!

    }

    @Override

    public void onFailure(int code) {

    // Command failed. Check for P2P_UNSUPPORTED, ERROR, or BUSY

    if (code == WifiP2pManager.P2P_UNSUPPORTED) {

    Log.d(TAG, "P2P isn'tsupported on this device.");

    else if(...)

    ...

    }

    });

    如果一切顺利,恭喜你大功告成。如果遇到问题,记住前面异步调用的参数 WifiP2pManager.ActionListener 参数,它提供了指示成功或失败的回调方法。把调试断点设置在 onFailure() 方法中来诊断问题。这个方法提供了错误代码,以下是可能发生的错误:

    P2P_UNSUPPORTED

    运行 app 的设备上不支持 Wi-Fi P2P

    BUSY

    系统忙于处理请求

    ERROR

    由于内部错误导致操作失败

    四、聊天室代码问题

    你这个是什么程序,ichat吗?给你个参考!

    <HTML>

    <head><META content="聊天,语音,语聊,可视,视频,嘉宾,访谈,深圳东方博雅科技,ICHAT,CHAT,VIDEO,AUDIO" name=Keywords><META content="iChat聊天--可视语音嘉宾聊天" name=Description>

    <TITLE>用户列表</TITLE>

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

    <style type="text/css">

    <!--

    body {

    font-family: "宋体";

    font-size: 9pt;

    line-height: 12pt;

    margin-left: 0px;

    }

    select { BACKGROUND-COLOR: #efefef; COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; Border-width: 1px;}

    a:visited { text-decoration: none}

    a:link { text-decoration: none}

    a:hover {

    text-decoration: none;

    }

    .boy { color: 0000FF}

    .girl { color: FF80FF}

    .private { color: green}

    .offline { color: gray}

    .p9 {font-size: 9pt}

    .p11{font-size: 11pt}

    body,td,th {

    font-family: 宋体;

    }

    a:active {

    text-decoration: none;

    }

    .STYLE1 {

    font-size: 20pt;

    color: #FFFF00;

    }

    -->

    </style>

    <script language="JavaScript">

    var strFormat = "<!--$ICON_FORMAT-->" ;

    var strMembersTag = "<!--$MEMBERS_TAG-->" ;

    var nMembersDisp = <!--$MEMBERS_DISPLAY--> ;

    function ShowTips(strUser,pThis)

    {

    var obj = parent.Users.FindObject(strUser);

    if(obj == null) return ;

    var xb, cs, level;

    if(obj.XB == 0)

    {

    xb = "女士" ;

    cs = "girl" ;

    }else

    {

    if(obj.XB == 1)

    {

    xb = "男士" ;

    cs = "boy";

    }else

    {

    xb = "不详" ;

    cs = "private";

    }

    }

    if(obj.Level < 10)

    level = obj.Level + " " ;

    else

    level = obj.Level ;

    var s = "<table width=130 border=0 cellspacing=1 cellpadding=2 bgcolor=#000066><tr bgcolor="

    if(obj.Online == 0) s += "#ffffe7" ;

    else s += "#dedfdf" ;

    s += "><td><center><table border=0 class='p9'><tr height=40 align=center><td>" ;

    if(obj.Icon.length > 0)

    s += strFormat.replace("<!--$OBJECT-->", obj.Icon) ;

    else

    s += "<font face=Wingdings size=7 color=#FF0000>J</font>" ;

    s += "</td><td valign=bottom><span class='p11'><font color=#FF9900><B>" ;

    s += parent.GetTitle(obj.Level) + "</B></font></span><BR>" ;

    if(parent.Users.FindObject(parent.youself).Level >= level)

    s += "级别:<font color=red>" + level + "级</font><BR>" ;

    else

    s += "<BR>" ;

    s += "性别:" + "<span class='" + cs + "'>" + xb + "</span>" ;

    s += "</td></tr><tr><td>姓名:</td><td class='" + cs + "'>" + obj.UserName ;

    s += "</td></tr><tr><td>昵称:</td><td class='" + cs + "'>" + obj.NickName ;

    if(obj.Arming.length > 0)

    {

    s += "</td></tr><tr><td colspan=2 align=center>" ;

    s += strFormat.replace("<!--$OBJECT-->", obj.Arming) ;

    }

    s += "</td></tr><tr><td colspan=2 align=center>" ;

    if(obj.Admin == 2)

    s += "<font color=red>★ ★管 理 员★ ★</font>" ; // 正式管理员

    else

    if(obj.Admin == 1)

    s += "<font color=red>☆ ☆临 管 员☆ ☆</font>" ; // 临时管理员

    s += "</td></tr></center></table></td></tr></table>" ;

    Tips.innerHTML = s ;

    var pTip = document.all["Tips"].style ;

    pTip.left = getPos(pThis,"left") - 9 ;

    pTip.top = pThis.offsetHeight + getPos(pThis,"top") ;

    pTip.width = 130;

    pTip.display = "" ;

    if(Tips.offsetTop + Tips.offsetHeight > document.body.offsetHeight)

    pTip.top = getPos(pThis,"top") - Tips.offsetHeight ;

    }

    function getPos(obj,type)

    {

    var n = 0 ;

    while(obj!=null)

    { if(type=="top")

    n += obj.offsetTop ;

    else

    n += obj.offsetLeft ;

    obj = obj.offsetParent ;

    }

    return n;

    }

    function Hidden()

    {

    var obj = document.all["Tips"].style ;

    obj.left = 0 ;

    obj.top = 0 ;

    obj.display = "none" ;

    }

    function GetComment(obj,type)

    {

    var xb, state ;

    if(obj.XB == 0) xb = "女士" ;else{if(obj.XB == 1) xb = "男士" ;else xb = "不详" ;}

    if(obj.Online == 0) state = "聊天中…" ;else state = "暂时离开" ;

    var s = "" ;

    var strComment = "\t\t\t\t\t\r\n" ;

    if(type == null) strComment = " **用户资料**\r\n" ;

    else s = type ;

    strComment += s + "姓名:" + obj.UserName + "\r\n" ;

    strComment += s + "昵称:" + obj.NickName + "\r\n" ;

    strComment += s + "性别:" + xb + "\r\n" ;

    strComment += s + "状态:" + state + "\r\n" ;

    strComment += s + "级别:" + obj.Level + "\r\n" ;

    strComment += s + "头衔:" + parent.GetTitle(obj.Level) ;

    return strComment ;

    }

    function DoWhois(str)

    { var obj = parent.Users.FindObject(str);

    if(obj == null) return ;

    parent.whois(obj.UserName);

    }

    function RndUsers()

    { var r, obj , n = parent.Users.GetCount() ;

    if(n > 5)

    { for(var i = 0; i < 5 ; i ++)

    { r = Math.round(Math.random()*(n-1)) ;

    obj = parent.Users.GetObject(r) ;

    if(obj.UserName != parent.youself) break;

    }

    if(i < 5)

    { if(confirm(GetComment(obj,"\t") + "\r\n\r\n" + "系统推荐[ " + obj.NickName + " ]和您聊天,您愿意吗?"))

    parent.cs(obj.UserName) ;

    return ;

    }

    }

    alert("非常抱歉,没有合适的聊友向您推荐!") ;

    }

    function OnSort(n)

    {

    switch(n)

    { case 0:

    return ;

    case "1":

    parent.Users.SortByXB() ;

    break;

    case "2":

    parent.Users.SortByLevel() ;

    break;

    case "3":

    parent.Users.SortByName();

    break;

    case "4":

    parent.Users.SortByState() ;

    break;

    case "90":

    parent.ToMusic();

    return;

    case "100":

    parent.Loop(0);

    break;

    case "101":

    var loop = prompt("请设定音乐播放的次数,1至99为有效值,-1表示不限次数!",parent.MyMusic.Loop) ;

    if(loop != null && loop < 100) parent.Loop(loop);

    break;

    default:

    parent.Play2(n) ;

    break;

    }

    if(n < 10) parent.start() ;

    else document.userlist.SELECT1.value = "0" ;

    }

    </script>

    </HEAD>

    <BODY rightmargin=0 onkeydown="if(event.keyCode==27)return false;" oncontextmenu="return false;">

    <script>this.document.bgColor=parent.skin.UserColor;</script>

    <div id="Tips" style="position:absolute; left:0; top:0; width:130; display=none;"></div>

    <form action="/" name="userlist">

    <table width="100%" border="2" align="left"><tr>

    <th background="http://139007.com/bg8.gif" scope="row"><a href="http://139007.com/phpbbs" target="_blank" class="STYLE1">荆松聊吧</a></th>

    </tr><tr>

    <th background="http://139007.com/3/top2_bg.gif" scope="row"><a href="http://139007.com/phpbbs" target="_blank"><img src="http://139007.com/3/js.gif" width="120" height="30" border="0"></a></th>

    </tr><tr>

    <th background="http://139007.com/3/top2_bg.gif" scope="row"><a href="http://139007.com/dz" target="_blank"><img src="http://139007.com/3/ly.gif" width="120" height="30" border="0"></a></th>

    </tr>

    </table>

    <div align="center"><br>

    <br>

    <br>

    <br>

    <br><br><br><br><br>

    <script>

    document.write("你自己:")

    me=parent.youself

    objs = parent.Users.FindObject(me)

    document.write("<font color=red>")

    document.write(objs.UserName)

    document.write("  </font>")

    </script>

    <BR>

    [<A href="javascript:parent.start();">刷新</A>|<A href="javascript:parent.ToMusic()"><font color=red>在线点歌台</font></A>]

    <BR>

    <SELECT name="SELECT1" onChange="OnSort(this.value)">

    <OPTION value='0'>==显示顺序==</OPTION>

    <OPTION value='1'>按女士优先</OPTION>

    <OPTION value='2'>按级别高低</OPTION>

    <OPTION value='3'>按姓名长度</OPTION>

    <OPTION value='4'>按在线状态</OPTION>

    <OPTION value='90' style="BACKGROUND:red; COLOR:white">*在线点歌台*</OPTION>

    <OPTION value="100">停止播放音乐</OPTION>

    <OPTION value="101">设定播放次数</OPTION>

    </SELECT></div><br><div align="left">

    [在线用户:<font color=red><B>

    <script>document.write(parent.Users.GetCount());</script>

    </B></font>人]

    <hr>

    <div align="left">[<A href="javascript:parent.FindFriend();"><font color=red>查寻聊友</font></A>/<A href="javascript:RndUsers();"><font color=red>自动推荐</font></A>]<br>

    [<A href="http://139007.com/kj/xc/" title="本功能需要泡到一定级别才能正常使用!欢迎大家泡分体验!" target="_blank"><font color=red>香港本港台</font></A>]<img src=http://image.ichat.net.cn/voiceimage/video.gif><br><script language="JavaScript">

    var color; //性别的颜色区分,修改性别区分颜色请编辑CSS属性的 .boy .girl .private

    var obj, UserName, NickName, XB, ICON ;

    for(var i=0; i<parent.Users.GetCount(); i ++)//循环写用户列表

    {

    obj = parent.Users.GetObject(i) ;

    if(obj.NickName.length > 0)

    {

    UserName = obj.UserName ; // 姓名

    Nick = obj.NickName; // 昵称

    XB = obj.XB ; // 性别

    ICON = obj.Icon ; // 头像

    if(obj.Online == 0)

    { if(XB == 0)

    color="girl";

    else

    if(XB ==1) //判断性别,然后用不同颜色表示

    color="boy";

    else color="private";

    }else

    color="offline" ;

    document.write("[<A href=\"javascript:parent.cs('"+UserName+"')\" onmouseover=\"ShowTips('" + UserName + "'," + "this" + ");\" onmouseout=\"Hidden();\"");

    document.write(" ondblclick='DoWhois(\"" + obj.UserName + "\")'>") ;

    document.write("<span class='"+color+"'>") ;

    if(obj.Admin == 2) document.write("<font color=#FF0000>★</font>") ; // 正式管理员

    else

    if(obj.Admin == 1) document.write("<font color=#FF0000>☆</font>");// 临时管理员

    document.write(Nick+"</span></A>]");

    if(UserName==parent.youself) document.write("<font color=red><=</font>");//你自己

    document.write("<BR>");

    }

    }

    /* 注:变量 parent.MaxOnline 代表本房间历史最高在线人数 */

    </script></div><hr>

    <INPUT type="checkbox" name="ch1" onClick="parent.bTimer=this.checked;" onDblClick="parent.bTimer=this.checked;"><A href="javascript:userlist.ch1.click();">定时刷新名单</a>

    <BR><BR>

    <table width="100%" border="1" bgcolor="#FFFFFF">

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://www.ltb888.com/1/" target="_blank"><img src="http://139007.com/3/gy.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://139007.com/dj.htm" target="_blank"><img src="http://139007.com/3/yy.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://www.nfd.com.tw/house/1976-99.htm" target="_blank" class="STYLE24"><img src="http://139007.com/3/ls.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://www.dffy.com/iq/index.asp?pageid=33" target="_blank" class="STYLE24"><img src="http://139007.com/3/zw.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://code.51boba.com" target="_blank"><img src="http://139007.com/3/wl.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th height="39" align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://www.singaporepools.com.sg/Lottery?page=toto" target="_blank"><img src="http://139007.com/3/xjp.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://139007.com:8889/UserGuide" target="_blank"><img src="http://139007.com/3/dj.gif" width="120" height="30" border="0"></a></th>

    </tr>

    <tr>

    <th align="center" valign="top" bordercolor="" background="http://139007.com/3/top2_bg.gif" bgcolor="" scope="row"><a href="http://www.ip138.com/" target="_blank"><img src="http://139007.com/3/ip.gif" width="120" height="30" border="0" class="girl"></a></th>

    </tr>

    </table>

    </a></DIV>

    <script>userlist.ch1.checked=parent.bTimer;</script>

    </form>

    </BODY>

    </HTML>

    以上就是关于chatrandom怎么用相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    微信和wechat互通吗

    chat与talk的区别(chatty和talkative的区别)

    vrchat怎么改中文(vrchat怎么改成中文)

    渠道分为哪几种(渠道分为哪几种类型)

    南城别墅景观设计专家咨询(南城别墅景观设计专家咨询电话号码)