三国杀lua2v2lua谁会制作

太阳神三国杀lua修改 要太阳神三国杀lua扩展包_微博生活网
你目前正在浏览:& > &
太阳神三国杀lua修改
太阳神三国杀lua修改
加不进游戏,有没哪位大神给个意见
想要调试可以开启***功能,那样就可以在***菜单做你想做的测试了,踏青版的。要把文件改名为weibao.lua放到extensions里面,就可以了我加了,可以。。.toif card and to and card.第11句改成if(not room:askForSkillInvoke(player, &luayiji&, data)) then return false end加了第三个参数data,就可以去实现ai了不过这个无关紧要。2.第29、30句改成local use = data:toCardUse()local card = use.cardlocal to = use:isNDTrick() then 你会发现你使用无中生有这样无目标的牌也会触发该技能(集智)从而摸了一张牌。只不过的集智逻辑有问题!1
你的代码 我看了,你是修改系统的,还是自己写的要加进去给个 API手册和 测试环境,要不然 无法 找到问题
没有手册不行
求太阳神三国杀的大神编辑下面的lua代码 ……
/share/link?shareid=629505&uk=...三国杀太阳神,lua武将怎么添加进去??? ……
直接解压 复制到太阳神三国杀的根目录 自己制作的单个武将lua需要放在根目录下的extensions...请问太阳神三国杀怎么做觉醒技lua:当你的手牌都是黑色时,你可以减一点体力上限,获得技能B。 ……
module(&extensions.kkk&, package.seeall) extension...想要太阳神三国杀lua扩展包 ……
在这个帖子里面的各期的“lua分享”去找,注意,lua要放在相应的版本 http://tieba.b...太阳神三国杀怎么添加自己制作的LUA武将? ……
自己制作的单个武将lua需要放在根目录下的extensions文件夹里才能运行,放到lang文件夹里...太阳神三国杀lua问题 ……
您这个文件的扩展名不对,将txt改成lua就好了。 步骤:点击文件,找到另存为,保存的时候讲文件扩展...太阳神三国杀添加lua文件不认 ……
必须使用太阳神三国杀v 2版,就是置顶贴那个0610版的太阳神三国杀太阳神三国杀lua放哪 ……
是extensions这个文件夹,没有这个文件夹的话可以自己创建一个关于太阳神三国杀lua编写的2个问题 ……
自己做几张红桃加黑桃的南蛮入侵,或者人物加张有这技能的^^^三国杀技能修改器三国杀lua技能框架生成器怎么用 ……
我想把自制武将放进游戏,写好了lua进行游戏测试正常,只有技能音效出不来,语音文件...这个游戏是基...
你可能感兴趣的内容?教程贴:教你自己编写DIY武将的AI(太阳神三国杀lua)96
上亿文档资料,等你来发现
教程贴:教你自己编写DIY武将的AI(太阳神三国杀lua)96
在cpp区发了那篇DIY教程贴之后,我转战到了l;首先,AI的编写与lua技能的代码有很大关系,我;1.写代码要整齐,缩进量要层层递进,保证代码的易;2.写触发技的时候,要清楚每个触发事件的原理,最;则可能引入异常的行为;3.没有必要的时候不要重载can_trigger;函数;4.如果一个触发技可以在多个时间下触发,在写on;发的事件来写条件分支语句,这样逻
在cpp区发了那篇DIY教程贴之后,我转战到了lua区,发现大家都是再写lua武将的DIY,没有人关心AI的lua。在我看来,与cpp相比,lua来实现DIY的武将优点是***卸载方便且不会影响cpp源代码的整洁,缺点是不能debug,通过设置断点来观察变量,在测试的过程中比较辛苦,还有就是偏于与系统耦合的技能比较难实现。这两天把AI部分的lua代码看了一遍清楚了,除了身份判断部分,基本清楚了它的原理。鉴于lua武将DIY的教程和范例已经比较完善,这次我就把AI的编写简要的整理一下。附件中的内容是和这次教程相关的代码、相关武将的卡牌图片以及本帖的PDF版本。附件中有“侠”三武将的lua和AI,以及两个我DIY的娱乐武将的AI(娱乐武将用CPP实现的,由于有一个修改性别的技能改变了底层的Player类,因此无法用lua完美实现,所以就不提供代码了,有兴趣的同学可以和我交流)。
首先,AI的编写与lua技能的代码有很大关系,我用自己设计的两个武将和“侠”三武将做了实验并且完成了这五个武将的AI。在编写“侠”三武将的AI时遇到了一些问题,后来我把寒秋的代码优化了一下才解决了问题。附件里会有“侠”三武将的代码,一个是原版的,一个是我改进过的,大家可以对比下。(并没有冒犯的意思,纯学术上的交流)所以算是给广大lua的DIY爱好者们几条编程方面的建议吧。
1. 写代码要整齐,缩进量要层层递进,保证代码的易读性
2. 写触发技的时候,要清楚每个触发事件的原理,最好不要加入多余的触发事件,否
则可能引入异常的行为。当然,一般来说引入多余事件只是降低程序运行的效率罢了,对于神杀影响应该不大。
3. 没有必要的时候不要重载can_trigger、enabled_at_play、enabled_at_response这些
函数。对于can_trigger这个函数,重载直接return true然后在on_trigger里判断玩家是否拥有该触发技和使用默认的can_trigger基本是一样的(因为can_trigger本身返回值就是触发者是否拥有该技能且触发者是否活着,貌似死人没法触发技能)。
4. 如果一个触发技可以在多个时间下触发,在写on_trigger函数的时候大家请按照触
发的事件来写条件分支语句,这样逻辑会更加清晰一些。
5. 尽量避免在视作技中使用askForCard这个函数,我来举个例子:如果一个视作技可
以把闪当作无中生有来使用,如果你不用askForCard,那么操作流程将是点击技能按钮à选择一张闪à点击确定当无中生有打出;但是如果使用了askForCard并且你装备了八卦阵,那么你点击技能按钮à系统提示你需要打出一张闪à使用八卦阵à判红à直接打出一张无中生有。一张牌当无中生有和零张牌当无中生有,知道区别了吧。
6. 在触发技一定要使用askForSkillInvoke(player,self:objectName(),data),这里要注意第
三个参数data,它包含触发事件的详细信息,一般卖血技的是damage的结构体、无言那种是cardEffect结构体、烈弓是slashEffect结构体。这些data中的信息在写AI的时候十分重要,因此务必要加上以便于AI中完成复杂的判断。我之前写AI就是因为askForSkillInvoke(player,self:objectName())导致需要的变量总是空值,郁闷了很久。
7. 触发技中askForCard之前最好加上askForSkillInvoke。对于人来说,如果不加
askForSkillInvoke,不想发动机能的时候直接点取消就行,加上了askForSkillInvoke无非就是在提示是否使用XXX技能时多点一个确定罢了。但是对于AI的编写,如果不加askForSkillInvoke,那么这个技能对应的AI就要写在smart-ai.lua的SmartAI:askForCard里,有点像cpp中的系统耦合技,这对于代码的整洁还有AI的移植是不利的。但是加上askForSkillInvoke后,我们就可以单独的对这个选择写一个AI,消除了耦合。
OK,建议提完了,开始说AI的编写吧。首先,基本上所有的非锁定技的视作技和触发技都可以独立新建一个lua文件编写,禁止技在smart-ai中的cardProhibit和slashProhibit里编写,锁定技在smart-ai.lua中的damageIsEffective、slashIsAvailable、prohibitUseDirectly、isCompulsoryView中编写,一些锁定技的响应(需要调用askForCard的)在smart-ai中的askForCard里编写,卡牌转换类技能在smart-ai中的getSkillViewCard里编写。
我把AI技能的编写分为几类:
1. 将卡牌视为三国杀已有主动使用卡牌的视作技,比如双雄、连环、火计
2. 将卡牌视为三国杀已有卡牌的视作技,这些卡牌用于响应,比如倾国、看破、急救
注:武圣、龙胆、酒池这些技能既属于第一类也属于第二类
3. 将卡牌视为技能卡的视作技,比如青囊、离间、驱虎
4. 所有的非锁定技的触发技,比如刚烈、八阵、悲歌
5. 禁止技,比如空城、谦逊、帷幕
6. 使效果无效的技能,暂且称无效技,比如无言、智迟、神君;有威慑力的技能,比
如刚烈、恩怨、雷击
7. 视作锁定技,比如戒酒、武神
8. 对出杀次数、杀指定目标数、杀的距离修改的技能,比如天义、咆哮、方天画戟
9. 响应时的斟酌,比如AOE奸雄收牌、无双肉林只有一张闪就直接掉血
此外,一些技能还涉及到选项,比如志继觉醒摸牌还是回血、反间选择花色、无谋弃掉标记还是流失体力;另一些技能涉及到目标的选择,比如驱虎赢了选择受伤害者、旋风选择伤害者或杀的目标、眩惑来的牌给谁。这就要求我们具体问题具体分析了。
第一类技能编写的通式是:
local skillname_skill={}
skillname _skill.name=& skillname &
table.insert(sgs.ai_skills, skillname)
skillname _skill.getTurnUseCard=function(self)
判断是否满足应该使用的条件,若不满足则return nil
local card
选则要发动技能的卡牌,赋值给card
if not card then return nil end
local suit = card:getSuitString()
local number = card:getNumberString()
local card_id = card:getEffectiveId()
local card_str = (&转换卡牌名称:skillname[%s:%s]=%d&):format(suit, number, card_id)
local skillcard = sgs.Card_Parse(card_str)
assert(skillcard)
return skillcard
例子是以下这个武将的技能—求败:
[&dgqb&] = &独孤求败&,
[&luawujian&] = &无剑&,
[&luayoujian&] = &有剑&,
[&luayoujiandev&] = &有剑&,
[&luaqiubai&] = &求败&,
[&luaqiubaix&] = &求败&,
[&:luawujian&] = &当你没有装备武器时你的杀不可被闪避。&,
[&:luaqiubai&] = &回合内你可以将任意武器牌当决斗使用。若决斗成功则你可以摸两张牌否则对方摸两张牌&,
[&:luayoujian&] = &当你装备有武器时本回合你可以出X张杀,X为你当前的攻击范围,回合内你使用的所有杀都将被计数(不包括决斗出的杀)。&,
--luaqiubai
local luaqiubai_skill={}
--设置技能名称
luaqiubai_skill.name=&luaqiubai&
--把这个技能添加进ai_skills列表中,使AI可以使用这个技能
table.insert(sgs.ai_skills,luaqiubai_skill)
--判断技能是否可以发动的函数
luaqiubai_skill.getTurnUseCard=function(self)
--获取手牌中杀的个数
local slash_num = self:getCardsNum(&Slash&)
--获取该回合出杀的次数
local slash_used = self.player:usedTimes(&Slash&)
--如果已装备武器,且手中有杀多于一个,
--且获取该回合出杀的次数小于攻击范围,则不发动该技能
--这是为了保证有剑和求败两个技能利用最大化
if self.player:getWeapon() and slash_num & 0
and slash_used & self.player:getAttackRange() then return nil end
--获取我所有的手牌和装备牌
local cards = self.player:getCards(&he&)
cards=sgs.QList2Table(cards)
local card
--根据使用价值来排序
self:sortByUseValue(cards,true)
--遍历所有卡牌
for _,acard in ipairs(cards)
--如果是武器牌则使用这个卡牌
if acard:inherits(&Weapon&) then
card = acard
--如果没选发动技能的卡牌则返回空值
if not card then return nil end
local suit = card:getSuitString()
local number = card:getNumberString()
local card_id = card:getEffectiveId()
--构造卡牌字符串,卡牌名称:技能名称[花色:点数]=卡牌ID
local card_str = (&duel:luaqiubai[%s:%s]=%d&):format(suit, number, card_id)
--指定要使用的卡牌
local skillcard = sgs.Card_Parse(card_str)
assert(skillcard)
return skillcard
第二类技能编写是在smart-ai.lua中的getSkillViewCard中添加代码,用于响应的卡牌有杀、闪、桃、酒、无懈,我们只需要在对应的分支语句里添加即可。比如在对闪的处理可以看到龙魂、龙胆和倾国,如果我们加一个技能叫“我闪”,这个技能可以把装备牌当闪使用,那么用下方红色的代码就能实现它的AI:
elseif class_name == &Jink& then
if player:hasSkill(&longhun&) and player:getHp() &= 1 then
if card:getSuit() == sgs.Card_Club then
return (&jink:longhun[%s:%s]=%d&):format(suit, number, card_id)
if card_place ~= sgs.Player_Equip then
if player:hasSkill(&longdan&) and card:inherits(&Slash&) then
return (&jink:longdan[%s:%s]=%d&):format(suit, number, card_id)
elseif player:hasSkill(&qingguo&) and card:isBlack() then
return (&jink:qingguo[%s:%s]=%d&):format(suit, number, card_id)
if card_place == sgs.Player_Equip and player:hasSkill(&woshan&) then
return (&jink:woshan[%s:%s]=%d&):format(suit, number, card_id)
有一个情况比较特殊,zeroCardView就是把0张牌当某牌,这个很特殊,目前只用来实现酒诗的AI,前两种技能如果是把0张牌当某牌,AI都可以用这个函数实现。如果写一个技能“万兽”和酒诗相似,只是正面向上时翻面可以当南蛮入侵,那么添加红色代码即可:
local function zeroCardView(class_name, player)
if class_name == &Analeptic& then
if player:hasSkill(&jiushi&) and player:faceUp() then
return (&analeptic:jiushi[no_suit:0]=.&)
else if class_name == &SavageAssault& then
if player:hasSkill(&wanshou&) and player:faceUp() then
return (&savage_assault:wanshou[no_suit:0]=.&)
第三类技能编写的通式是:
local skillname_skill={}
skillname _skill.name=& skillname &
table.insert(sgs.ai_skills, skillname)
skillname _skill.getTurnUseCard=function(self)
判断是否满足应该使用的条件,若不满足则return nil
local card
选则要发动技能的卡牌,赋值给card
if not card then return nil end
local card_str = (&@SkillNameCard=%d&):format(card:getId())
local skillcard = sgs.Card_Parse(card_str)
assert(skillcard)
return skillcard
sgs.ai_skill_use_func[&SkillNameCard&]=function(card,use,self)
local target
选择技能发动的目标,若没找到合适目标则return nil
use.card = card
use.to =append(target)
例子是以下这个武将的技能—争宠:
[&wujian&] = &吴健&,
[&zhengchong&] = &争宠&,
[&:zhengchong&] = &出牌阶段,你可以弃一张手牌,指定两名女性角色。若如此做,视为其中一名女性角色对另一名女性角色使用一张【决斗】(此【决斗】不可被【无懈可击】响应),每回合限用一次&,
[&yange&] = &阉割&,
[&:yange&] = &你每次对其他男性角色造成伤害,可使收到该伤害的角色变为女性,直到游戏结束&,
--zhengchong
local zhengchong_skill={}
--设置技能名称
zhengchong_skill.name=&zhengchong&
--把这个技能添加进ai_skills列表中,使AI可以使用这个技能
table.insert(sgs.ai_skills,zhengchong_skill)
--判断技能是否可以发动的函数
zhengchong_skill.getTurnUseCard=function(self)
--如果该回合发动过则不发动
if self.player:hasUsed(&ZhengchongCard&) then
三亿文库包含各类专业文献、高等教育、各类资格考试、中学教育、外语学习资料、文学作品欣赏、生活休闲娱乐、行业资料、教程贴:教你自己编写DIY武将的AI(太阳神三国杀lua)96等内容。 
 以天蓬元帅猪八戒为主角的关于太阳神三国杀Lua武将...太阳神三国杀的 AI 系统一般会 在这个时候记录一些...这里可以总结出一句话 了:源代码在手,怎么 DIY 都...  本文假定读者已熟悉太阳神三国杀 Lua 武将扩展的有关概念和方法。 本文内容只...教程贴:教你自己编写DI... 16页 3下载券 ©2016 Baidu 使用百度前必读 |...  太阳神三国杀LUA手册_电脑基础知识_IT/计算机_专业...--视为技的定义对于 AI 而言是无效的。为了让 AI...教程贴:教你自己编写DI... 16页 3下载券
太阳...  百度太阳神三国杀 Lua 吧 (百度文库收藏版) 编写...武将变更 第八章:启用 AI 一、创建我们的 AI ...在最上面找到 DIY 菜单,里面有个卡牌编辑器: 别...  由ADD-SUMME 攒编 ADD-SUMMER 声明:本经验交流为...下面来教大家如何制作食物以及***支弹药和模具,以及...· 太阳神三国杀lua教程 4855人
· 三国杀教程 ...

参考资料

 

随机推荐