找回密码
 点一下
查看: 9993|回复: 25

非常简单的JASS之二——禁止单机模式

[复制链接]
发表于 2008-8-19 10:28:56 | 显示全部楼层 |阅读模式
[codes=jass]
function NoOneSelf takes nothing returns nothing
local force f = GetPlayersByMapControl(MAP_CONTROL_USER)
声明局部变量f ,类型为 force(玩家组)
初始值为【获得所有用户控制的玩家】
if CountPlayersInForceBJ(f) == 1 then
如果f 的玩家数量为 1,则
call CustomDefeatBJ( GetLocalPlayer(), "禁止单机游戏!" )
翻译为Trigger,就是【游戏-失败】-【本地玩家】,发送信息“禁止单机游戏”
本地玩家就是指代玩家自己(这个函数的意思你得自己体会,这不是一两句话能解释的清楚的)
endif
call DestroyForce(f)
删除玩家组
set f=null
清空局部变量
endfunction

function GetPlayersByMapControl takes mapcontrol whichControl returns force
【玩家组-选取由 XX 控制的玩家】
function CountPlayersInForceBJ takes force f returns integer
【玩家组-获得玩家组中玩家数量】
function CustomDefeatBJ takes player whichPlayer, string message returns nothing
【游戏-失败】
constant native GetLocalPlayer      takes nothing returns player
【本地玩家】  PS:指代玩家自己,所以对每一个玩家返回值都不一样。
native DestroyForce             takes force whichForce returns nothing
【玩家组-删除玩家组】
[/codes]

非常简单的JASS——禁止单机模式.w3x

18 KB, 下载次数: 227

评分

参与人数 1威望 +20 收起 理由
kook + 20

查看全部评分

发表于 2008-8-19 10:59:39 | 显示全部楼层
嘛~SaveGameCache是很恶毒的,本来魔兽的创建缓存就有限,要是被不知哪来的有事没事加个SaveGameCache破图弄得以后连战役都玩不了了就火大了
回复

使用道具 举报

 楼主| 发表于 2008-8-19 11:05:25 | 显示全部楼层
………………………………
我知道了。
那就这样吧:
[codes=jass]
local force f = GetPlayersByMapControl(MAP_CONTROL_USER)
if CountPlayersInForceBJ(f) == 1 then
call CustomDefeatBJ( GetLocalPlayer(), "禁止单机游戏!" )
endif
call DestroyForce(f)
set f=null
[/codes]
谢谢指导。
回复

使用道具 举报

发表于 2008-8-19 11:41:33 | 显示全部楼层
在搞个禁止在单人游戏里面玩的教程 这贴就完美了
(提示:模拟作弊)
回复

使用道具 举报

 楼主| 发表于 2008-8-19 11:57:59 | 显示全部楼层
……………………
那个…………LS什么意思,我表看懂………………
回复

使用道具 举报

发表于 2008-8-19 12:17:23 | 显示全部楼层
给个更简单的写法
[jass]function s_Actions takes nothing returns nothing
local integer I = 0
loop
exitwhen(I>11)
if (GetPlayerController(Player(I)) == MAP_CONTROL_USER and Player(I)!=GetLocalPlayer()) then
return
endif
set I=I+1
endloop
call CustomDefeatBJ( GetLocalPlayer(), "不要单人玩哦!" )
endfunction[/jass]
回复

使用道具 举报

 楼主| 发表于 2008-8-19 12:24:45 | 显示全部楼层
(被自己忍无可忍的和谐掉了)
回复

使用道具 举报

发表于 2008-8-19 12:28:54 | 显示全部楼层
谁说的
你用了N多bj函数..
你怎么不把bj函数展开看看
你的代码量 就很多了
而且bj函数 是调用再调用函数 效率相当低
这个里面除了最后一句我不高兴写了
所以是bj的

这个loop
在有玩家的时候可能只执行一次
你观察一下函数
回复

使用道具 举报

 楼主| 发表于 2008-8-19 12:29:36 | 显示全部楼层
(被自己忍无可忍的和谐掉了)
回复

使用道具 举报

发表于 2008-8-19 12:31:40 | 显示全部楼层
为什么不能
回复

使用道具 举报

发表于 2008-8-19 12:32:41 | 显示全部楼层
思路就是
判断 玩家是否是 用户控制 and 该玩家 不是本地玩家
这样就能确定除了本地玩家之外还有 是用户控制的玩家 就说明 不是单人在玩
这个时候就 结束函数 就是跳过之后的所有动作

如果以上的全部不成立
说明 只有一个玩家
就 显示失败
回复

使用道具 举报

 楼主| 发表于 2008-8-19 12:34:43 | 显示全部楼层
(被自己忍无可忍的和谐掉了)
回复

使用道具 举报

发表于 2008-8-19 12:36:17 | 显示全部楼层
如果只要禁可以输入秘籍的单人游戏的话,Cheat函数+资源判断应该就可以了
回复

使用道具 举报

 楼主| 发表于 2008-8-19 12:41:52 | 显示全部楼层
(被自己忍无可忍的和谐掉了)
回复

使用道具 举报

发表于 2008-8-19 15:58:30 | 显示全部楼层
lz。。。被打击了
回复

使用道具 举报

 楼主| 发表于 2008-8-19 16:07:34 | 显示全部楼层
(被自己忍无可忍的和谐掉了)
回复

使用道具 举报

发表于 2008-8-19 18:03:18 | 显示全部楼层
其实啊
只要
何必那么麻烦
[jass]
if(bj_isSinglePlayer)then
    call 单机
else
    call 不是单机
endif
[/jass]
回复

使用道具 举报

发表于 2008-8-19 21:15:31 | 显示全部楼层
渣bj居然还有这个变量………………
回复

使用道具 举报

发表于 2008-8-19 22:40:52 | 显示全部楼层
bj_isSinglePlayer真相~
[codes=jass]
    set userControlledPlayers = 0
    set index = 0
    loop
        exitwhen index >= bj_MAX_PLAYERS
        if (GetPlayerController(Player(index)) == MAP_CONTROL_USER and GetPlayerSlotState(Player(index)) == PLAYER_SLOT_STATE_PLAYING) then
            set userControlledPlayers = userControlledPlayers + 1
        endif
        set index = index + 1
    endloop
    set bj_isSinglePlayer = (userControlledPlayers == 1)[/codes]

如果是判断是不是一个人玩,冰块的代码就很好~如果是要判断是不是在单人游戏下玩,就用猪头的方案吧~
其实不动冰别为打击灰心呀,任何人都需要在教别人同时自己扩充知识并学习的恩恩
回复

使用道具 举报

发表于 2008-8-20 14:15:00 | 显示全部楼层

说实话不是怕被别人破解单机的话用我的方法是最简单的了
嗯嗯
单机防改的经典例子就素黑暗侵袭了
37+74-56-23-31 哈哈哈邪恶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-21 21:45 , Processed in 0.190640 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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