脚本例子与DEBUG

DEBUG

程序启动时,会执行注册部分,要执行就要先编译(整个脚本文件),当某个脚本有问题,就会编译出错,并有出错信息。

在这里表现为,发现有出错信息,马上将其以文本框的方式输出,并马上停止程序。出错信息就是出问题的地方。

例子001,在进入北提大地图时,消息栏输出“Hello World!”

*OmodScriptReg
	RegArea(areaNorthTyris)
	return

*OmodScriptRun
	txt "Hello World!"
	return

例子002,一份完整的剧情

这份剧情分开两部分,主要用于介绍各种功能的用法

文件名可为:带少女回家_01.hsp

*OmodScriptReg
	RegArea(areaNorthTyris)
	RegFlag(1,0)
	RegCharaId(166)
	RegCharaRelation(cAlly)
	return

*OmodScriptRun
	SetUserFlag(1,1)
	return

文件名可为:带少女回家_02.hsp

*OmodScriptReg
	RegArea(areaHome)
	RegFlag(1,1)
	return

*OmodScriptRun
	gosub *omod_RunScriptEv
	SetUserFlag(1,2)
	txtNew : txt "测试剧情完结!"
	return

/* 剧情可以放在任何位置,一般扔到最后吧
{event_begin}
{actor_1} "少女,81"
{mc} "xp_shrine2.mid"
{pic} "bg9"
{txt}
两人终于来到家门口了...
{chat_1}
来这个山洞干嘛?不是回家吗?
{wait}
{se} "chime.wav"
{chat_1}
...别告诉我这就是你家啊~
{fade}
{event_end}
*/

例子003,测试脚本

*OmodScriptReg
	RegArea(areaPalmia)
	RegCharaRaceType("norland")
	return

*OmodScriptRun
	txtNew
	txt "当前脚本="+om_currscript_file
	txtNew
	txt "结果数量="+OmThisScriptTempV1
	return

例子004,cdata与定义简单使用

*OmodScriptReg
	RegArea(areaNorthTyris)
	return

*OmodScriptRun
	txtNew
	repeat maxFollower
		if cExist(cnt)!cAlive :continue
		txt " HP="+cHP(cnt)
	loop
	return

例子005,杀两只“街头艺人”的任务

*OmodScriptReg
	RegKillTarge(170)
	RegKillTargeNum(2)
	return

*OmodScriptRun
	txtNew
	txt "当前脚本="+om_currscript_file
	txt " 完成杀"+cid(OmThisScriptTempTC)+"的任务"
	txtNew
	return

例子006,创建角色,添加同伴,创建道具

*OmodScriptReg
	RegArea(areaHome)
	RegFlag(1,2)
	return

*OmodScriptRun
	f=get_freeAlly()
	if f!false {
		p=211
		flt:initLv=cLevel(pc)*2/3+1:NoVoidLv=true:chara_create -1,p,cX(pc),cY(pc)
		; 创建角色之后会将其ID赋值给 rc
		cdata(headActSub, rc) = actThrowPotionGreater : cActHeal(rc)=spHealCritical
		om_calcActIndex rc
		gosub *add_ally
		cBitMod cMetal,rc,true
		flt:item_create -1,idGold,cX(pc),cY(pc),30000
		SetUserFlag(1,3)
	}
	return

例子007,自定义家和队伍的名字

*OmodScriptReg
	RegArea(areaHome)
	return

*OmodScriptRun
	mnName="深海填守府"
	gnTeam1="深海棲艦"
	txtNew
	txt "地图名="+mnName
	txtNew
	txt "队伍名="+gnTeam1
	txtNew
	return

例子008,文字输入框的使用

*OmodScriptReg
	RegArea(areaHome)
	return

*OmodScriptRun
	txtEf coYellow:txt "输入想要在消息栏显示的文字?"
	val=winPosX(290),winPosY(90),16,0,0:inputLog="":gosub *prompt_word
	if (inputLog="")or(inputLog=" ") {
		txt "输入不能为空。"
		return
	}
	txt "「"+inputLog+"」"
	return

例子009,突发事件的选择

*OmodScriptReg
	RegArea(areaHome)
	return

*OmodScriptRun
	gosub *screen_draw
	s="福音":file="bg_re12"
	buff="天上掉下的馅饼"
	listMax=0
	atxAct "获得10000G",1
	atxAct "获得100白金币",2
	atxAct "免了",3
	gosub *re_select
	if rtval=3 {
		return
	} else:if rtval=1 {
		flt:item_create -1,idGold,cX(pc),cY(pc),10000
	} else:if rtval=2 {
		flt:item_create -1,idPlat,cX(pc),cY(pc),100
	}
	return

例子010,更新原始角色数据

*OmodScriptReg
	UpdateCreature(16)
	return

*OmodScriptRun
	; 暂时只支持更新talk的数据,每个都可以写9条,从0-8
	OmScriptTalkTxtAggro(0)="再打我要还手了!"
	OmScriptTalkTxtAggro(1)="Don't touch me."
	OmScriptTalkTxtAggro(2)="再打我要叫人了!"
	
	OmScriptTalkTxtDead(0)="我有不死身的,你等着。"
	OmScriptTalkTxtDead(1)="I'll be back."
	OmScriptTalkTxtDead(2)="下次不要让我看见你!"
	
	OmScriptTalkTxtKilled(0)="我吃过夜粥的!"
	OmScriptTalkTxtKilled(1)="看招!"
	OmScriptTalkTxtKilled(2)="啊哒!"
	OmScriptTalkTxtKilled(3)="啊多!"
	return

例子011,未想到。。。

来告诉我想要知道的?