用mpqmaster--如何修改魔兽rpg地图的触发器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用mpqmaster--如何修改魔兽rpg地图的触发器?相关的知识,希望对你有一定的参考价值。

比如我要多加一条触发,该怎么做?有高手的请把步骤说明白详细点,谢谢啦,哈哈o(∩_∩)o...哎呀,我是穷人哎,没钱,抱歉了…………
汗~~~~~~~~~~~~,其实我就想添一条《 事件:“我输入一句话)” 动作:“给我加钱加木头”》这样的作弊触发来自娱自乐的,竟然没办法,我熟悉魔兽自带的那个编辑器,那个是傻瓜式的,我会,但是修改rpg就不行了,我没接触过JASS,只是听说……

mpqmaster这个不推荐使用

下载个魔兽改图一条龙(里面有我们需要的火龙hke和编辑jass的JassCraft)或者直接下载个火龙hke JassCraft用记事本也行

用火龙hke解压你要的文件

打开里面的war3map.j 记事本可以JassCraft也可以

然后搜索function InitCustomTriggers takes nothing returns nothing这句鸟语

比如我们搜到这句

function InitTrig_Melee_Initialization takes nothing returns nothing

    set gg_trg_Melee_Initialization = CreateTrigger(  )

    call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions )

endfunction

//===========================================================================

function InitCustomTriggers takes nothing returns nothing

    call InitTrig_Melee_Initialization(  )

endfunction

接下来

复制call CheatGold()到call InitTrig_Melee_Initialization(  )的下边

复制

function CheatGoldActions takes nothing returns nothing

    call SetPlayerState(GetTriggerPlayer(),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(GetTriggerPlayer(),PLAYER_STATE_RESOURCE_GOLD)+1000)

endfunction

function CheatGold takes nothing returns nothing

    local trigger CheatGoldTrigger=CreateTrigger()

    local triggeraction CheatGoldTriggerAction

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(0),"-gold",true)

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(1),"-gold",true)

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(2),"-gold",true)

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(3),"-gold",true)

    set CheatGoldTriggerAction=TriggerAddAction(CheatGoldTrigger,function CheatGoldActions)

    set CheatGoldTrigger=null

    set CheatGoldTriggerAction=null

endfunction

到function InitCustomTriggers takes nothing returns nothing

这句的上边

比如复制好就是

function InitTrig_Melee_Initialization takes nothing returns nothing

    set gg_trg_Melee_Initialization = CreateTrigger(  )

    call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions )

endfunction

function CheatGoldActions takes nothing returns nothing

    call SetPlayerState(GetTriggerPlayer(),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(GetTriggerPlayer(),PLAYER_STATE_RESOURCE_GOLD)+1000)

endfunction

function CheatGold takes nothing returns nothing

    local trigger CheatGoldTrigger=CreateTrigger()

    local triggeraction CheatGoldTriggerAction

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(0),"-gold",true)

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(1),"-gold",true)

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(2),"-gold",true)

    call TriggerRegisterPlayerChatEvent(CheatGoldTrigger,Player(3),"-gold",true)

    set CheatGoldTriggerAction=TriggerAddAction(CheatGoldTrigger,function CheatGoldActions)

    set CheatGoldTrigger=null

    set CheatGoldTriggerAction=null

endfunction

//===========================================================================

function InitCustomTriggers takes nothing returns nothing

    call InitTrig_Melee_Initialization(  )

    call CheatGold()

endfunction

然后保存注意别动其他的 用火龙打开地图 把war3map.j替换掉

然后重压缩就行了

进入游戏输入-gold就加1000的钱 只限玩家1234

球采纳 谢谢 

有不懂继续问

参考技术A 做法很简单,
事件
玩家 玩家1(红色)输入<空白符串>,信息过滤方法,完全匹配
(玩家1~你设置的玩家数量动作一直复制粘贴出来)
条件
输入的字符串等于XXX(可以设置为,给我金钱)
动作
玩家-增加XX (数量)事件响应触发玩家的XX(黄金或者木头也可以在复制一次设置为2个)

我这方法用于很多地方,并不需要J语,可以在增加一个设置,来控制打字增加金钱CD
参考技术B 你懂JASS吗?
JASS写触发
没加密的地图可以写入
用触发器写
设置一个函数 组=包含所有玩家 玩家输入字符 字符等于“给我钱”且玩家属于组 为真 则触发 给玩家=触发玩家 XX钱和木头
基本就是这样的
也可以写简单点的
直接就是红色玩家 输入一句话
我也不是高手 应该排泄的 把输入的字符删掉 我就知道这么多 写我可以写出来 但是现在没装WAR3 所以没法截图 大致思路是这样的 很简单的 照着设置就好了

codevs 2059 逃出克隆岛

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图。

今天,他找到一张名为《逃出克隆岛》的地图,在这张地图中,有一个n行m列的矩阵,矩阵由’Y’,’C’,’#’,’*’,’P’,5种元素组成。’Y’表示yh的出生位置,C表示克隆岛的出口,’#’表示该处不可通过,’*’表示通过该处需要消耗金币cost,’P’表示传送阵,任意两个传送阵之间可以免费互相传送。由于这仅仅是第一关,yh不想浪费太多的体力,聪明的你能帮他算出从’Y’出发到’C’最少需要消耗多少金币吗?当然,如果yh永远无法到达’C’,请输出” screw you!”以表到yh的不满。

输入描述 Input Description

第一行两个整数,n,m,表示矩阵有n行m列

接下来为n行m列的矩阵,由’Y’,’C’,’#’,’*’,’P’,组成,含义如题目描述。

输出描述 Output Description

输出1行,表示yh需要花费的最小体力(如果无法到达输出”screw you!”)。

样例输入 Sample Input

【样例输入1】

1 3 3

Y*C

【样例输入2】

1 3 2

Y#C

【样例输入3】

1 5 2

YP#PC

样例输出 Sample Output

【样例输出1】

3

【样例输出2】

screw you!

【样例输出3】

0

数据范围及提示 Data Size & Hint

【数据范围】

对于100%的数据,n*m≤5000,传送阵’P’的数量≤500

BFS 

屠龙宝刀点击就送

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>

using namespace std;
char tx[5000][5000];
bool csm[5000][5000],vis[5000][5000];
int cost,start_x,start_y,over_x,over_y,n,m,fx[5]={1,-1,0,0},fy[5]={0,0,-1,1};
void print(int k)
{
    printf("%d",k);
    exit(0);
}
void bfs(int sx,int sy)
{
    int f[50000][4],l=0,r=0;
    f[++r][1]=sx;
    f[r][2]=sy;
    f[r][3]=0;
    do
    {
        int now_x=f[++l][1],now_y=f[l][2];
        for(int j=0;j<4;++j)
        {
            int to_x=now_x+fx[j],to_y=now_y+fy[j];
            if(to_x==over_x&&to_y==over_y)
            print(f[l][3]);
            if(to_x>=1&&to_x<=n&&to_y>=1&&to_y<=m&&tx[to_x][to_y]!=#&&vis[to_x][to_y]==0)
            {
                if(csm[to_x][to_y]==1)
                {
                    f[++r][1]=to_x;
                    f[r][2]=to_y;
                    f[r][3]=f[l][3];
                    csm[to_x][to_y]=0;
                    for(int i=1;i<=n;++i)
                    {
                        for(int k=1;k<=m;++k)
                        {
                            if(csm[i][k]==1)
                            {
                                csm[i][k]=0;
                                f[++r][1]=i;
                                f[r][2]=k;
                                f[r][3]=f[l][3];
                            }
                        }
                    }
                }
                else
                {
                    vis[to_x][to_y]=1;
                    f[++r][1]=to_x;
                    f[r][2]=to_y;
                    if(tx[to_x][to_y]==*) f[r][3]=f[l][3]+cost;
                    else f[r][3]=f[l][3];
                }
            }
        }
        
    }while(l<=r);
}
int main()
{
    scanf("%d%d%d",&n,&m,&cost);
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
        {
            cin>>tx[i][j];
            if(tx[i][j]==P) csm[i][j]=1;
            else if(tx[i][j]==Y) start_x=i,start_y=j;
            else if(tx[i][j]==C) over_x=i,over_y=j;
        }
    }
    bfs(start_x,start_y);
    printf("screw you!");
    return 0;
}

 

以上是关于用mpqmaster--如何修改魔兽rpg地图的触发器?的主要内容,如果未能解决你的问题,请参考以下文章

类似西方世界的劫难的魔兽rpg地图 跪求啊

魔兽争霸RPG地图开发教程2

魔兽争霸RPG地图开发教程1

魔兽争霸RPG地图开发教程3

魔兽争霸 玩RPG图退出程序的时候显示错误 :内存空间不足

魔兽争霸3地图编辑器中游戏缓存怎么用?