绝对女神源码研究笔记2
相关链接:绝对女神全套源代码资源 绝对女神一键端
举例:水晶之城NPC [传送使者]雷欧 (1)在怪物数据表open_ch.smt中的数据
字段名 值
idx 115
modelID 31
aniSetType 64
tagModelID
tagMoveID
level 100
name [传送使者]雷欧
document 把玩家移动到所需要&n地方的守护使者
phySize 1.000000
size 0
type 0
gen 0
maxRA 80000
maxSA 0
recoveryRARate 0
recoverySARate 0
attackAni -1
atkPhyMinDmg 1600
atkPhyMaxDmg 1600
atkMagMinDmg 1000
atkMagMaxDmg 1000
atkHitPower 4500
atkDelay 600
atkLength 140
atkRange 0
atkCriticalPro 2.000000
atkCriticalDmg 0
defPower 2419
defAvoidPower 3000
defPositiveRes 25
defNegativeRes 50
velocity 2.600000
stunTime 500
skillIdx
skillLevel
skillAni
skillNumber 0
exp 10000
genExp 5000
lootSE 20000
lootItem
pathFinding 40
optionGrade 0
rareItemGrade 0
mapIconType 7
defDamageReduce 0
atkDefAffectedDegree 0
mapDensityWeight 0
respawnTime 50000
AIScriptIdx 3
npcAIScriptIdx 14
physicalSize 1.000000
traceSize 40
recognizeSize 15
unreserved
(2)在水晶之城刷怪配置文件JA_Town_F_00.tbl中NPC [传送使者]雷欧的信息
// [荐龋急牢] 矫坷
SPAWN_IDX 16
ENTITY_TYPE NPC
WORLD_IDX 0
AI_TYPE 0
NPC_AI_TYPE -1
MONSTER_TABLE_IDX 115
NPC_TABLE_IDX -1
RESPAWN_TIME 5000
SUMMON_TIME 0
SMALL_ZONE_FLAG 0
SPAWN_ZONE_IDX_NUMBER 0
RANDOM_POSITION_NUMBER 1
SPAWN_POSITION 16450.00 13700.00 4271.00
SPAWN_ANGLE 0.00 90.00 0.00
SPAWN_WAYPOINT_NUMBER 0
(3)在脚本信息文件scriptinfo.tbl中
A、对照怪物信息可知NPC的通用智能脚本号AI_SCRIPT为3,对应文件为:
AI_SCRIPT
{
…
3 scripts/type4.SS // [NPC傍侩]框流捞瘤臼澜
…
}
B、对照怪物信息可知NPC的对应脚本文件号为14,对应文件为:
NPC_SCRIPT
{
…
14 scripts/npc_sio.ss
…
}
(4)智能脚本文件type4.qst
; 力格 : 鸥涝 1 NPC
; 累己老磊 : 2003/01/07
; 荐沥老磊 :
; 汲疙 : (捞悼)捞悼窍瘤 臼澜
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 捞悼窍瘤 臼绰 阁胶磐 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCEDURE move
SetTimer( SLOW_TIMER );
SetMoveType( DISABLE_MOVE );
SetAIEvent( AI_MOVE ); ; 捞悼栏肺 捞亥飘甫 悸泼
ENDPROCEDURE
(5)NPC脚本文件npc_sio.qst
; 09/27
; 涅胶飘 NPC 矫坷
; 胶迄困摹 – 酒扼踞
; 扁瓷 – 措拳窍扁 (涅胶飘 ID 0 – 内夸棱扁 涅胶飘)
; 2003/09/23
; 累己磊 : 炼辆巢
; 矫坷
; 涅胶飘 0锅阑 啊瘤绊 乐澜
; 矫累
VAR G_TALKIDX = -1;
PROCEDURE PROC_START
IF
IsMessageWating() == FALSE
THEN
SendMessage( 0 ) ; “很高兴见到你,年轻人,嗯~~那个什么来着,我在执行任务。我这个人啊!在一个地方呆不久,转悠转悠身体才能好一点啊!找我有事吗?”
SendMessageButton( 0, 6 ) ; “交谈”
SendMessageButton( 1, 88 ) ; “移动”
SendMessageButton( 2, 2 ) ; “关闭”
ELSE
IF
GetMessageSelect() == 0
THEN
CALL PROC_TALK
ENDIF
IF
GetMessageSelect() == 1
THEN
CALL PROC_TRANSFER_WITH_NPC
ENDIF
IF
GetMessageSelect() == 2
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
PROCEDURE PROC_TRANSFER_WITH_NPC
IF
IsMessageWating() == FALSE
THEN
SendMessage( 0 ) ; “很高兴见到你,年轻人,嗯~~那个什么来着,我在执行任务。我这个人啊!在一个地方呆不久,转悠转悠身体才能好一点啊!找我有事吗?”
SendMessageButton( 0, 97 ) ; 冰封溪谷
SendMessageButton( 1, 98 ) ; 极地雪原
SendMessageButton( 2, 99 ) ; 地下宫殿1层
SendMessageButton( 3, 100 ) ; 地下宫殿2层
SendMessageButton( 4, 101 ) ; 地下宫殿3层
ELSE
IF
GetMessageSelect() == 0
THEN
MoveToBindingPosition( 25, 100 );
ENDIF
IF
GetMessageSelect() == 1
THEN
MoveToBindingPosition( 26, 400 );
ENDIF
IF
GetMessageSelect() == 2
THEN
MoveToBindingPosition( 27, 400 );
ENDIF
IF
GetMessageSelect() == 3
THEN
MoveToBindingPosition( 28, 1200 );
ENDIF
IF
GetMessageSelect() == 4
THEN
MoveToBindingPosition( 29, 5000 );
ENDIF
ENDIF
ENDPROCEDURE
; ————————————————————
PROCEDURE PROC_TEMP_STORE
OpenStore( 0 );
CALL PROC_NONE
ENDPROCEDURE
PROCEDURE PROC_NONE
ENDPROCEDURE
PROCEDURE PROC_TEMP_SKILL
IF
IsMessageWating() == FALSE
THEN
SendMessage( 0 ) ; “很高兴见到你,年轻人,嗯~~那个什么来着,我在执行任务。我这个人啊!在一个地方呆不久,转悠转悠身体才能好一点啊!找我有事吗?”
SendMessageButton( 0, 11 ) ; 训练精神技能
SendMessageButton( 1, 12 ) ; 训练风系技能
SendMessageButton( 2, 13 ) ; 训练水系技能
SendMessageButton( 3, 14 ) ; 训练土系技能
ELSE
IF
GetMessageSelect() == 0
THEN
OpenSkillLevelUp( 0 );
CALL PROC_NONE
ENDIF
IF
GetMessageSelect() == 1
THEN
OpenSkillLevelUp( 1 );
CALL PROC_NONE
ENDIF
IF
GetMessageSelect() == 2
THEN
OpenSkillLevelUp( 2 );
CALL PROC_NONE
ENDIF
IF
GetMessageSelect() == 3
THEN
OpenSkillLevelUp( 3 );
CALL PROC_NONE
ENDIF
ENDIF
ENDPROCEDURE
; ————————————————————
; 涅胶飘 胶跑 眉农
;======================================================================
; 措拳 橇肺矫廉
;======================================================================
PROCEDURE PROC_TALK
IF
CheckPlayerClass() == 2 ; 沥脚老锭
THEN
CALL PROC_QUEST_TALK
ENDIF
IF
CheckPlayerClass() == 3 ; 官恩老锭
THEN
CALL PROC_QUEST_TALK
ENDIF
G_TALKIDX = 327
CALL PROC_ALWAYS_TALK ; 老惑利 措拳 贸府
ENDPROCEDURE
;======================================================================
; 老惑利 傍烹 措拳 橇肺矫廉
;======================================================================
PROCEDURE PROC_ALWAYS_TALK
IF
IsMessageWating() == FALSE
THEN
SendMessage( G_TALKIDX ) ;
SendMessageButton( 0, 2 ) ; 摧扁
ELSE
IF
GetMessageSelect() == 0
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
PROCEDURE PROC_QUEST_TALK
IF
CheckQuestStep( 2, -1 ) == TRUE ; 涅胶飘 0 矫累
THEN
CALL PROC_QUEST_0_PREPARE
ENDIF
IF
CheckQuestStep( 2, 0 ) == TRUE ; 内夸狼 惑酒甫 掘绰吝
THEN
CALL PROC_QUEST_0_COMPLETE_CHECK
ENDIF
IF
CheckQuestStep( 2, 1 ) == TRUE ; 扁粮 肯丰 纳腐 焊惑 贸府
THEN
CALL PROC_QUEST_0_COMPENSATION
ENDIF
IF
CheckQuestStep( 2, 2 ) == TRUE ; 货肺款 肯丰贸府
THEN
CALL PROC_QUEST_0_END
ENDIF
ENDPROCEDURE
; 涅胶飘 霖厚
PROCEDURE PROC_QUEST_0_PREPARE
IF
IsMessageWating() == FALSE
THEN
SendMessage( 1 ) ; 绢辑坷霸唱…
SendMessageButton( 0, 7 ) ; 矫埃狼 捞赴俊 措秦 汞绰促.
ELSE
IF
GetMessageSelect() == 0
THEN
CALL PROC_QUEST_0_START
ENDIF
ENDIF
ENDPROCEDURE
; 涅胶飘 矫累
PROCEDURE PROC_QUEST_0_START
IF
IsMessageWating() == FALSE
THEN
SendMessage( 2 ) ; 矫埃狼 捞赴
SendMessageButton( 0, 8 ) ; 备秦促 霖促
SendMessageButton( 1, 9 ) ; 备秦促 林瘤 臼绰促
ELSE
IF
GetMessageSelect() == 0
THEN
CALL PROC_QUEST_0_START_0
ENDIF
IF
GetMessageSelect() == 1
THEN
CALL PROC_QUEST_0_START_1
ENDIF
ENDIF
ENDPROCEDURE
; 备秦促 霖促
PROCEDURE PROC_QUEST_0_START_0
IF
IsMessageWating() == FALSE
THEN
SendMessage( 3 ) ; 绊缚匙. 磊匙
SendMessageButton( 0, 2 ) ; 摧扁
SetQuestStep( 2, 0 ); ; 涅胶飘 胶跑 0栏肺 悸泼
SetQuestStatus( 2 ); ; 矫埃狼 捞赴 涅胶飘 矫累
ELSE
IF
GetMessageSelect() == 0
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
; 备秦促 林瘤 臼绰促
PROCEDURE PROC_QUEST_0_START_1
IF
IsMessageWating() == FALSE
THEN
SendMessage( 4 ) ; 绢辑 备秦促 林霸
SendMessageButton( 0, 2 ) ; 摧扁
SetQuestStep( 2, 0 ); ; 涅胶飘 胶跑 0栏肺 悸泼
SetQuestStatus( 2 ); ; 矫埃狼 捞赴 涅胶飘 矫累
SendMessageButton( 0, 2 ) ; 摧扁
ELSE
IF
GetMessageSelect() == 0
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
; 掘绰 吝
PROCEDURE PROC_QUEST_0_COMPLETE_CHECK
IF
;CheckQuestItem( 210, 2, 20 ) == TRUE ; 涅胶飘 酒捞袍 眉农
CheckQuestItem( 210, 2, 10 ) == TRUE ; 040616 内夸狼 惑酒10俺肺 荐沥
THEN
;DeleteQuestItem( 210, 2, 20 )
DeleteQuestItem( 210, 2, 10 ) ; 040616 内夸狼 惑酒10俺肺 荐沥
CALL PROC_QUEST_0_COMPLETE
ELSE
CALL PROC_QUEST_0_NOT_COMPLETE
ENDIF
ENDPROCEDURE
; 肯丰窃
PROCEDURE PROC_QUEST_0_COMPLETE
IF
IsMessageWating() == FALSE
THEN
SendMessage( 5 ) ; 绊缚匙. 抄 捞 拱贩拱贩
SendMessageButton( 0, 2 ) ; 摧扁
;AddItem( 209, 0, 0 ); ; 矫埃狼 捞赴 眠啊
;AddLoot(1000, 0, 0, 0); ; 版氰摹 1000 眠啊
AddLoot(500, 0, 0, 0); ; 040616 版氰摹 500 栏肺 荐沥
;SetQuestStep( 2, 1 ) ; 涅胶飘 胶跑 1肺 悸泼 (OLD 滚怜)
SetQuestStep( 2, 2 ) ; 涅胶飘 胶跑 2肺 悸泼
CompleteQuest(2);
ELSE
IF
GetMessageSelect() == 0
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
; 肯丰窍瘤 臼澜
PROCEDURE PROC_QUEST_0_NOT_COMPLETE
IF
IsMessageWating() == FALSE
THEN
SendMessage( 6 ) ; 磊匙啊 酒流 公攫啊甫 茫瘤
SendMessageButton( 0, 2 ) ; 摧扁
ELSE
IF
GetMessageSelect() == 0
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
; 捞固 肯丰窃
PROCEDURE PROC_QUEST_0_END
IF
IsMessageWating() == FALSE
THEN
SendMessage( 7 ) ; 磊匙啊 酒流 公攫啊甫 茫瘤
SendMessageButton( 0, 2 ) ; 摧扁
ELSE
IF
GetMessageSelect() == 0
THEN
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
;————————————————————–
; 焊惑贸府
;————————————————————–
PROCEDURE PROC_QUEST_0_COMPENSATION
IF
IsMessageWating() == FALSE
THEN
SendMessage( 193 ) ; 焊惑贸府 措荤
SendMessageButton( 0, 2 ) ; 摧扁
ELSE
IF
GetMessageSelect() == 0
THEN
AddLoot(900, 0, 0, 0); ; 900狼 唱农甫 眠啊肺淋
SetQuestStep( 2, 2 ) ; 涅胶飘 胶跑 2栏肺 悸泼
CloseMessage()
ENDIF
ENDIF
ENDPROCEDURE
npc脚本的功能函数
#IsMessageWating()
———————-
IsMessageWating();
———————-
返回值 : TRUE, FALSE
- 返回是否有消息正在等待中
#SendMessage(1)
———————-
SendMessage(int msgIdx);
———————-
返回值 : 无
- 发送对话
#SendMessageButton(2)
———————-
SendMessageButton(int btnSeqIdx, int btnMsgIdx);
———————-
返回值 : 无
- 设置对话框按钮
#GetMessageSelect()
———————-
GetMessageSelect()
———————-
返回值 : 您选择的对话框按钮btnSeqIdx
- 选择对话框按钮返回
#CloseMessage()
———————-
CloseMessage()
———————-
返回值 : 无
- 对话结束
——- 以下为增加的功能函数 ———-
#OpenStore(1)
———————-
OpenStore( int storeIdx )
———————-
- 打开商店
storeIdx : 商店编号
#CloseStore()
———————-
ClostStore()
———————-
- 商店关闭
#CheckQuestStep(2)
———————-
CheckQuestStep( int questIdx, int step )
———————-
- 检测任务是否处于某个步骤
questIdx : 任务编号
step : 步骤
#SetQuestStep(2)
———————-
SetQuestStep( int questIdx, int step )
———————-
- 设置任务当前的步骤
questIdx : 任务编号
step : 步骤
#CheckQuestItem(3)
———————-
CheckQuestItem( int questItemIdx, int questIdx, int number )
———————-
- 检测是否有指定数量的指定任务物品
questItemIdx : 任务物品编号
questIdx : 任务编号
number : 数量
#DeleteQuestItem(3)
———————-
DeleteQuestItem( int questItemIdx, int questIdx, int number )
———————-
- 删除指定数量的指定任务物品
questItemIdx : 任务物品编号
questIdx : 任务编号
number : 数量
#SetQuestStatus(1)
———————-
SetQuestStatus( int questIdx )
———————-
- 设置任务状态
questIdx : 任务编号
#ClearQuestStatus(1)
———————-
ClearQuestStatus( int questIdx )
———————-
- 清除任务状态
questIdx : 任务编号
#AddItem(4)
———————-
AddItem( int itemTableIdx, int optionFlag, int number, int meggageflag )
———————-
- 增加物品
itemTableIdx : 物品在物品表中的索引
optionFlag : I can find the option for picking
number : 数量
meggageflag : 显示到客户端得消息
#DeleteItem(2)
———————-
DeleteItem( int itemTableIdx, int number )
———————-
- 删除物品
itemTableIdx : 物品在物品表中的索引
number : 数量
#CompleteQuest(1)
———————-
CompleteQuest( int questIdx )
———————-
- 设置任务已经完成
questIdx : 任务编号
#OpenSkillLevelUp(1)
———————-
OpenSkillLevelUp( int genType )
———————-
- 技能升级
genType : 技能类型
#OpenBinding(1)
———————-
OpenBinding( int bindingIdx )
———————-
- 是否打开绑定
bindingIdx : 绑定编号
#AddLoot(4)
———————-
AddLoot( int exp, int genexp, int nak, int gencap )
———————-
- 经验, GEN经验, 纳克, 增加GEN能力
#SendChatMessage(1)
—————————————————–
SendChatMessage( int lPackIdx )
—————————————————–
Lpack_Quest 在聊天窗口中输出指定编号的消息
#SetDynamicField(3)
—————————————————–
SetDynamicField ( int questIdx, int fieldIdx, int value )
—————————————————–
设置任务动态变量的值
#GetDynamicField(2)
—————————————————–
GetDynamicField ( int questIdx, int fieldIdx )
—————————————————–
得到任务动态变量的值
#CheckPlayerClass()
—————————————————–
检测玩家的类型 (精神, 风, 水, 土 ..)
#CheckPlayerJob()
—————————————————–
检测玩家职业 (沥脚, 官恩, 拱, 入, 规尔扁荤, 清脚扁荤…)
#CheckPlayerLevel()
—————————————————–
检测玩家等级
#CheckPlayerGenLevel()
—————————————————–
检测玩家GEN等级
#CheckPlayerStatus(1)
—————————————————–
CheckPlayerStatus( int statusType )
—————————————————–
得到玩家的状态(0 : force, 1 : soul, 2 : agi, 3 : vit)
#MoveToBindingPosition(2)
—————————————————–
MoveToBindingPosition( int bindingIdx, int bindingCost )
—————————————————–
移动到指定移动位置
#AwakenPlayerJob(1)
—————————————————–
AwakenPlayerJob( int jobType )
—————————————————-
唤醒玩家职业
#GetCompleteCount(1)
—————————————————–
GetCompleteCount(int questIdx)
—————————————————–
得到重复完成指定任务的次数
如果没有执行此指定任务返回-1, 如果正在执行此指定任务则返回0
#OpenDepot(0)
—————————————————–
OpenDepot()
—————————————————–
打开仓库
#CloseDepot(0)
—————————————————–
CloseDepot()
—————————————————–
关闭仓库
#OpenPrecocity(0)
—————————————————–
OpenPrecotity()
—————————————————–
打开成熟仓库
#OpenCraft(0)
—————————————————–
OpenCraft()
—————————————————–
打开物品制作
#OpenUpgrade(0)
—————————————————–
OpenUpgrade()
—————————————————–
打开物品升级
#InitPlayerStatus(1)
—————————————————–
InitPlayerStatus( int nakPerLevel )
—————————————————–
初始化玩家状态. 需要纳克nakPerLevel * level.
#OpenQuestScroll(0)
—————————————————–
OpenQuestScroll()
—————————————————–
打开任务卷轴
#AddQuestItem(4)
—————————————————-
AddQuestItem(int questItemIdx, int questIdx, int number,int maxnum)
—————————————————-
-增加指定数量的指定物品
questItemIdx : 任务物品编号
questIdx : 任务编号
number : 数量
maxnum : 最大数量
#FindEmptyInventoryPos(0)
—————————————————-
FindEmptyInventoryPos()
—————————————————-
-找到空闲的包裹位置,如果没有空闲的包裹位置,则返回-1
#SendDialogMessage(0)
—————————————————-
SendDialogMessage()
—————————————————-
-发送对话框信息
#CheckAutoQuestType(0)
—————————————————-
CheckAutoQuestType()
—————————————————-
- 检测自动任务类型
#OpenNpcInventory(0)
—————————————————-
OpenNpcInventory()
—————————————————-
- 打开NPC包裹.
#OpenGambleStore(1)
—————————————————–
OpenGambleStore(int gambletype)
—————————————————–
打开Gamble商店
#OpenDanBattleWin()
—————————————————–
OpenDanBattleWin();
—————————————————–
打开公会战窗口
#OpenEventCraft()
—————————————————–
OpenEventCraft();
—————————————————–
打开事件升级
#GonryunBattle()
—————————————————–
GonryunBattle();
—————————————————–
打开昆仑训练
#TransportGolryun()
—————————————————–
TransportGolryun();
—————————————————–
传送到昆仑战地图
#TransportArayan()
—————————————————–
TransportArayan();
—————————————————–
传送到准备室
#SuggestGolryunBattle()
—————————————————–
SuggestGolryunBattle();
—————————————————–
昆仑战申请
#BuyGolryunBattleTicket()
—————————————————–
BuyGolryunBattleTicket();
—————————————————–
购买昆仑战门票
#ShareMoney()
—————————————————–
ShareMoney();
—————————————————–
共享金钱
#DisplayTournament()
—————————————————–
DisplayTournament();
—————————————————–
显示参战人员列表
#CheckPrize()
—————————————————–
CheckPrize();
—————————————————-
检测奖品
#OpenPackage()
—————————————————-
OpenPackage();
—————————————————-
打开包裹
#helpOpen()
—————————————————-
helpOpen();
—————————————————-
打开帮助
#OpenGiftCardWin()
—————————————————-
OpenGiftCardWin();
—————————————————-
打开礼物卡片窗口
#ObserveTournament()
—————————————————–
ObserveTournament();
—————————————————–
观众模式
相关文章
- DNF单机版真100级真女鬼剑风法全职业三觉 Win7亲测可玩 (内含教程GM工具 需要虚拟机)
- 网络游戏 决战掉率列表
- 决战游戏地图坐标
- 决战数据库0nlineshop表NPC卖东西的
- 决战GameUser数据表详解说明 DROIYAN ONLINE
- 决战DROIYAN ONLINE 7.0版本怪物列表
- 决战DROIYAN ONLINE如何16进制刷刷教程
- 传奇教程 GOM引擎RMB地图脚本,传奇私服一条龙设置RMB点进入地图的方法 传奇脚本
- 传奇教程 GOM引擎转生地图脚本,传奇开区时添加需要转生进入地图的命令 传奇脚本
- 传奇教程 GOM引擎九零土豪脚本,传奇一条龙开区时添加VIP称号地图命令 传奇脚本