找传奇、传世资源到传世资源站!

传奇sf教程 脚本制作变量大全 传奇新手教程

2021.5.16 技术教程 4496 编辑

脚本制作变量大全 

     

checkjob (Warr, Wizard, Taos) ;测试职业

checkgold (金币数) ;测试金币

checklevel (等级) ;测试等级

checkitem (物品名) (数量) ;测试物品及数量

give gold (金币数) ;给钱

give (物品名) (数量) ;给物及数量

take gold (金币数) ;拿走钱

take (物品名) (数量) ;拿走物及数量

checkpkpoint (pk值) ;测试PK值

checkluckypoint (幸运值) ;幸运值正值为好,负值为差

checkduraeva (物品名) (数值) ;一般测试矿物等物品的品质

checkhum (地图名) (数值) ;测试这个地图的人数

checkmonmap (地图名) (数值) ;测试这个地图的怪物数

map (地图名) ;移动到这个地图

mapmove (地图名) (坐标A) (坐标B) ;移动到这个地图指定坐标

monclear 地图清除

close 关闭对话框

TimeRecall (设定时间值) ;分钟,一般指进入地图时间限制

BreakTimeRecall ;中断设定时间

ExchangeMap (地图名) ;与指定地图里的人交换位置

daytime sunset ;一天时间

checkbaggage ;测试背包满没

small (变量) (数值) ;测试变量是不是小于指定数值

large (变量) (数值) ;测试变量是不是大于指定数值

equal (变量) (数值) ;测试变量是不是等于指定数值

mov (变量) (数值) ;让变量等于指定数值

sum (变量A) (变量B) ;A+B 注意,如果还要家第3个数直接换行写sum (变量C) 

注:关于SUM的详解

首先有MOV (变量X) 0 ;(变量X)清0

sum (变量A) (变量B) ;X=A+B

sum (变量C) ;X=X+C

movr (变量) (数值) ;随机把指定数值以下的数(正数)给变量

inc (变量) (数值) ;让变量自动加指定数值到变量

playdice (骰子数) @xxx ;玩骰子,跳转到标签[@xxx]

random (随机数) ;一般用在#IF语句中作为触发#IF机率,有时随机数=并列#IF语句数用于随机多项选择,既:

#IF RANDOM 3 #SAY() #ELSEACT 

#IF RANDOM 3 #SAY() #ELSEACT

#IF RANDOM 3 #SAY() #ELSEACT

Check [条件数] 1 ;测试[条件数]触发与否 1(触发) 

SET [条件数] 1 ;设置[条件数]触发 

batchDelay (暂停时间) ;一般为1

addbatch (地图名1)

addbatch (地图名2)

addbatch (地图名3)

addbatch (地图名4)

addbatch (地图名5)

batchmove ;一步步到下一个地图直到5

param1 01141 ;01141=(地图名)

param2 10 

param3 10

mongen 火焰沃玛2(怪物名) 30 10

;玩骰子脚本解析

#IF

equal p9 1 ;测试 p9是不是等于1

#ACT 

goto @cube ;是的,到@cube

BreakTimeRecall (中断设定时间)

break

#IF

equal p9 9 ;测试 p9是不是等于9

#ACT

goto @quit ;是的,到@quit 退出

BreakTimeRecall (中断设定时间)

break

[@main-1]

#IF

#ACT

mov p9 0 ;测试 p9是不是等于0

#SAY

say ;欢迎词

<下一步/@pre_cube>

[@pre_cube]

#IF

checkitem 筹码 1 ;测试有没有筹码

#ACT

mov p9 1 ;有,让p9=1

take 筹码 1 ;给出一个筹码

movr d0 6 ;;随机把6以下的数(正数)给d0

inc d0 1 ;让d0自动加1到d0

playdice 1 @cube ;玩骰子,点击到标签[@cube]

#SAY

正在投骰子. \\ <下一个/@cube>

#ELSESAY

quit

<退出/@Quit>

#ELSEACT

mov p9 9 ;转到标签@quit并让P9等于9

[@Quit]

#IF

#ACT

map B011 ;退出到B011地图 

[@cube]

#IF

#SAY

骰子的点数 <$STR(D0)> \\ ;<$STR(D0)>是变量,把D0数值型转字符型

你可以前进 <$STR(D0)> \\ <移动/@next_cube>

[@next_cube]

#IF

equal d0 1 ;如果 d0=1

#ACT

goto @posi1 ;到POSI1

break

#IF

equal d0 2 

#ACT

goto @posi2

break

#IF

equal d0 3 

#ACT

goto @posi3

break

#IF

equal d0 4 

#ACT

goto @posi4

break

#IF

equal d0 5

#ACT

goto @posi5

break

#IF

equal d0 6 

#ACT

goto @posi6

break

[@Posi1]

#IF

#ACT

batchDelay 1 ;一般为1(暂停时间)

addbatch B102 ;步进地图名1

batchmove ;移动到最后一个步进地图

[@Posi2]

#IF

#ACT

batchDelay 1 

addbatch B102

addbatch B103

batchmove

[@Posi3]

#IF

#ACT

batchDelay 1

addbatch B102

addbatch B103

addbatch B104

batchmove

[@Posi4]

#IF

#ACT

batchDelay 1

addbatch B102

addbatch B103

addbatch B104

addbatch B105

batchmove

[@Posi5]

#IF

#ACT

batchDelay 1

addbatch B102

addbatch B103

addbatch B104

addbatch B105

addbatch B106

batchmove

[@Posi6]

#IF

#ACT

batchDelay 1 ;一般为1(暂停时间)

addbatch B102 ;步进地图名1

addbatch B103 ;步进地图名2

addbatch B104 ;步进地图名3

addbatch B105 ;步进地图名4

addbatch B106 ;步进地图名5

addbatch B107 ;步进地图名6

batchmove ;移动到最后一个步进地图(这里是6)

;结束

SET

语句:

#IF

……

#ACT(SAY)

……

#ELSESAY(ACT) ;ELSE的两句是并列的,都是IF<>(条件)的动作

……

#ELSEACT(SAY)

……

goto (标签名)

break (中断)

\\ ;换行

<xxx/@xxx>

变量:

<$USERNAME> 当前用户名

<$GUILDWARFEE>行会战金币数

<$LORD>沙巴克行会头名

<$OWNERGUILD>沙巴克行会名

<$UPGRADEWEAPONFEE>升级武器价格

<$USERWEAPON> 放在对话框里的武器名字

<$STR(变量)> 把变量转换为字符型

check [ ] check [111] 1 检测111是否为1

checkunit

checkopen

random random 6 产生一个小与6的随机整数 

gender 检测性别

daytime

checklevel checklevel 10 检测等级是否大于10

checkjob checkjob wizard 检测职业

checkitem检测物品

checktiemw

checkgoldcheckgold 1000检测身上的钱是否大于1000

istakeitem

checkdura 物品的持久

checkduraeve

dayofweek 游戏中的时间

hour

min

checkpkpointcheckpkpoint 2检测人物PK值是否大于2

checkluckpoint检测人物幸运数

checkmonmap

checkmonarea

checkhum 检测地图是否有玩家

checkckbaggage

checknamelist

equalequal d1 2检测变量d1是否等于2

largelarge d1 2检测变量d1是否大于2

smallsmall d1 2检测变量d1是否小于2

set [ ]set [111] 1

reset

setopen

setunit

resetunit

taketake 物品 数量

givegive 物品 数量

takew

close

mapmove

map

breakbreak

timerecall

breaktimerecall

param1

param2

param3

param4

takecheckitem

mongen

monclear

movmov d1 1

incinc d1 1

dec dec d1 1

sumdec d1 1

movrmovr d1 6

exchangemap

recallmap

addbatch

batchdelay

batchmove

playdice掷色子

addnamelist

delnamelist

goquest

endquest

goto

#call []

#act

goto

#sethome

#define

#include

definestxt

@home

@main

#if

#act

#elseact

{quest ***

{~quest [] ***

#rand

[goods]

#say

#elsesay

$pricerate

$upgradeweapenfee

$userweapon

@s_repair

@buy

@sell

@repair

@makedrag

@prices

@storage

@getback

@upgradenow

@getbackupgnow

@exit

@@buildguild

@@guildwar

@@donate

@requestcaselewarnow

$castlegold

$todayincome

broken

open

shut

$castledoorstale

$repairdoorgold

$repairwallgold

$guardfee

$guardrule

@@withdrawal

@@receipts

@openmaindoor

@closemaindoor

@repairdoornow

@repairwallnow1

@repairwallnow2

@repairwallnow3

@hireguardnow

@hireguards

@hirearchernow

感谢楼上的提供,给大家转个学习脚本的简单教程(转中箭的神仙)

第一节 序言

很多人都或多或少的接触过传奇服务器端脚本文件,也很想自己制作一点脚本来试试,但又不敢乱碰生怕改坏一点东西造成不能运行服务器端,其实“脚本语言“(我们暂且称他为一种语言)和C语言等等程序语言比起来那真是不值得一提。看完我给大家写的这篇文章后,你就自己偷着乐吧...

可以说传奇服务器端所有的重点都集中在\\mir200\\envir\\中,这里面记载着所有服务器要在游戏中表现的东西。在游戏中的npc信息也在其中,npcs.txt文件和merchant.txt文件中记载着npc的名称、出现的地图、坐标、范围和形象代码。你要问两个记载的npc有什么不同?为什么不和在一起算了?我来告诉你,npcs.txt中记载的npc是对话型npc,在进入游戏后,不能够使用@reloadnpc刷新信息的npc。而merchant.txt是交易型和任务型npc,可以使用@reloadnpc刷新信息。但我也做过试验,两种npc互换后也可以使用,好像没有太大的限制。

npcs.txt对应的文件在.\\npc_def\\文件夹中,merchant.txt对应的文件在.\\market_def\\文件夹中。你如果要添加npc的时候,要注意npc的文件名,例如你要创建一个超级商人的npc要他出现在比奇省330:330的坐标。首先你要在.\\market_def\\文件夹中创建一个文本文件命名为“超级商人-0“(这里你可以使用英文,也可以使用中文,但后面的数字必须要是这个npc出现的地图代码!),然后把你写好的脚本粘贴在里面。再打开merchant.txt文件,添加以下信息:

;调用的文件 地图 坐标x 坐标y 范围 人物代码 刷新时间

超级商人 0 330 330 0 5 0

相信大家可以看懂吧,这里面的空格不要紧,没有规定信息之间必须空几格。人物代码自己换吧,现在的npc有46种模样。

和脚本的规则一样,这两个文件里面以;开头的行就当作注释部分不做编译。

第2节

现在步入正题,谈谈脚本的制作。

npc脚本分为两种,一种是不做交易的npc,一种是与之交易的npc。我们先来讲不做交易的npc

这类脚本的开头一般以[@main]开头,但并不是必须以他开头,main的英文意思是“主体,主要部分”的意思,所以用他这是个好习惯。

接着就是条件语句#if,和他对应的#act,就是说如果...那么...,我在之前的《脚本语言之不完全公略》一文中提到了一系列的测试语句。#if后面可以跟这个测试语句,比如测试金钱checkgold,测试级别checklevel等等,这些测试语句可以连用,挑选满足这所有值的人。如果你想不要任何条件的话就把他留空,后面直接接#act.

接着就是#act,如果有人满足了上述条件,那么...我们可以使用一些命令应用于他,比如take拿走他身上的什么东西,mapmove把他移动到什么地图,set赋予他什么函数值等等。这些语句你也可以连着使用。后面也可以跟文字,那么就在传奇里面显示为对话。

下面是#ELSEACT,如果没有满足#if条件的,就不再运行#act后面的指令,直接运行#ELSEACT后面的指令。后面也可以跟文字,那么就在传奇里面显示为对话。

#say和#elsesay的用法和#act#elsesay的用法相同。

范例:

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

;传送猪7的npc脚本

[@main]

#if

checkgold 10000

checklevel 30

#act

take 金币 10000

map d717

break

#elsesay

你有10000个金币吗?要不然就是你没有30级。我不能把你传送到猪7了!自己跑吧。<关 闭/@exit>

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

这就是一个极其简单的传送脚本。我们下一节讲稍微复杂的段落脚本。

第三节

这一节我们来讲段落脚本。

复杂的脚本需要有数个[@main][@main-1]等等组成,从[@main]到[@main-1]之间称为一个段落,他们之间是由goto命令来衔接的,#if满足条件的话,#act就执行goto @main-1命令,转向[@main-1]段落。值得一提的是goto是脚本自动做出转换段落的命令,还有一种转换段落的方式,那就是要玩家自己选择段落。<go to main-1/@main-1>这部分将在游戏中显示为黄色可以点选的信息,玩家鼠标选择后转向main-1段落。

范例:

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

;赠送回城卷脚本

[@main]

#if

checkpkpoint 2

#act

goto @main-1

#elseact

give 回城卷 1

[@main-1]

你是红名啊!别想让我可怜你,你是个十足的恶魔!什么?怒视着我干吗?信不信我现在就让你去死?<相信,我很害怕,我现在就走./@exit><不信,我杀人不眨眼,还怕你?/@main-2>

[@main-2]

#if

#act

Param1 t131

Param2 10

Param3

 

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复