请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
楼主: admin

Z服刺客韩服传奇3新手经常出现的一些问题解答!

[复制链接]

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:54:08 | 显示全部楼层
NPC基础写法
范本说明

下面用肉店的脚本来做基础说明                 蓝色字为本身脚本的注解内容  红色字为注解说明,请认真看

# -*- coding: utf-8 -*-        有中文,如果是纯英文的,可以不加这行
#载入模块SYS
import sys
#引用模块的地址
import Globals                       调用Globals                       
import clr
clr.AddReferenceToFile("Library.dll")
from Library import *
import NpcEvent
import collections                                从这里往上,基本都直接复制就行了
######################################################
#本函数为程序调用的固定格式 函数名和参数数量不要修改
#OnClick(Self, Sender, Menu)
##参数 Self:NPC的类
##   Sender:玩家的类
##     Menu:菜单的类
#####################################################
def OnClick(args):                               # 对NPC进行鼠标点击处理
  Self = args[0]
Sender = args[1]                              
Menu = args[2]                               这里是固定格式,不能变
Dict={}                                                                        Dict对象
#红名判断
if(Sender.Stats[Stat.PKPoint] > 199):                              如果 玩家的PK值大于199,那么就是红名了,就显示拒绝交易对话框
  str = """请你离开。
  
  我不想和红名交易。
  
  [离开:0]"""
#跳转菜单1商品                                                                 点击按钮1以后跳转到菜单1这里                  

  elif (Menu == 1):
  Dict['Goods'] =goods                # 定义可购买商品
  Dict['Types'] =types          # 定义类别
  Dict['DialogType'] = NPCDialogType.BuySell  # 类型为Library.Enums里的买卖类    BuySell为买卖
  str = """如果您有什么需要,请告诉我。。。。。。                  NPC显示的文字内容
  我的存货越来越少了,所以我会收购一些高质量的肉。
  
  [返回:5]
  [离开:0]"""   
#主菜单                                                                                  如果不是红名,就跳转到主菜单
else:
  str = """欢迎光临我的店。
  我经营多年,刀法举世无双。
  我能为您做些什么?
  
  [查看 商品:1]                                                                         按钮1查看商品
  [离开:0]"""
Dict['Say']=str                         # 定义聊天框对话内容
return Dict
#类型为 Library.Enums里的肉类   
types =[ItemType.Meat]                            这里其实代表两个意思,比方你写了武器类,那么这里一个是可以买卖武器,如果你增加了修理按钮,那么对应这里可以修理武器
#商品列表  '商品名称'  商品价格比例,固定格式为float(1.0)比例倍数
goodslist=[
('鸡肉',float(1)),
('猪肉',float(1)),
('鹿肉',float(1)),
('牛肉',float(1)),
('狼肉',float(1)),]
goods = collections.OrderedDict(goodslist)

#NPC调用定义
NpcEvent.add_listener(15,"OnClick",OnClick)                        15是NPC的Index,代表哪个NPC调用这个脚本

回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:54:27 | 显示全部楼层
传送基础写法
范本说明

下面用比奇城的脚本来做基础说明                 蓝色字为本身脚本的注解内容  红色字为注解说明,请认真看

# -*- coding: utf-8 -*-        有中文,如果是纯英文的,可以不加这行
#载入模块SYS
import sys
#引用模块的地址
from Globals import *
import collections
import clr
clr.AddReferenceToFile("Library.dll")
from Library import *
import Server
Server.Envir.SEnvir.Log(__name__+"导入")
import NpcEvent                               从这里往上,基本都直接复制就行了
######################################################
#本函数为程序调用的固定格式 函数名和参数数量不要修改
#OnClick(Self, Sender, Menu)
##参数 Self:NPC的类
##   Sender:玩家的类
##     Menu:菜单的类
#####################################################
def OnClick(args):                               对NPC进行鼠标点击处理
  Self = args[0]
Sender = args[1]                              
Menu = args[2]                               这里是固定格式,不能变
Dict={}                                                                        Dict对象
#红名判断
if(Sender.Stats[Stat.PKPoint] > 199):                              如果 玩家的PK值大于199,那么就是红名了,就显示拒绝交易对话框
  str = """请你离开。
  
  我不想和红名交易。
  
  [离开:0]"""
#飞比奇
elif(Menu == 1):
  if (Sender.Gold < 10000):
   str = """你没有足够的金币,无法传送。
   
    [离开:0]"""
  else:                                                                          #地图传送限制,用于版本设置,判断排行榜等级 人物
  not CanMoveInMap(99,1)                                        #排行榜等级大于多少级,达到几个人,这个地图才能传送
  return
  else:
   SubGold(Sender,10000)
   Sender.TeleportByMapIndex(1,140,263) #飞地图ID X坐标 Y坐标
   return
#自由通行
elif(Menu == 2):
  str = """我知道你想传送到哪里?

  [神舰:21] 自由通行
  [熔岩地带:22] 自由通行 (等级 45+)
  [海盗洞穴:23] 自由通行 (等级 45+)

  [离开:0]"""
#神舰
elif(Menu == 21):
  if(Sender.GetItemCount("自由通行证") < 1):
   str = """无法传送到目的地,
   没有自由通行证。

   [离开:0]"""
  else:
   Sender.TakeItem("自由通行证",1)
   Sender.TeleportByMapIndex(68,43,62) #飞地图ID X坐标 Y坐标
   return
#熔岩地带
elif(Menu == 22):
  if(Sender.Level < 45):
   str = """无法传送到目的地,
   等级没有达到要求。

   [离开:0]"""  
  elif(Sender.GetItemCount("自由通行证") < 1):
   str = """无法传送到目的地,
   没有自由通行证。

   [离开:0]"""
  else:
   Sender.TakeItem("自由通行证",1)
   Sender.TeleportByMapIndex(332,19,27) #飞地图ID X坐标 Y坐标
   return
#海盗洞穴
elif(Menu == 23):
  if(Sender.Level < 45):
   str = """无法传送到目的地,
   等级没有达到要求。

   [离开:0]"""  
  elif(Sender.GetItemCount("自由通行证") < 1):
   str = """无法传送到目的地,
   没有自由通行证。

   [离开:0]"""
  else:
   Sender.TakeItem("自由通行证",1)
   Sender.TeleportByMapIndex(301,162,209) #飞地图ID X坐标 Y坐标
   return   
#主菜单
else:
  str = """选择目的地
  
  [比奇县:1] 10,000 金币

  [自由通行:2]
  
  [离开:0]"""
Dict['Say']=str                         #定义聊天框对话内容
return Dict

#NPC调用定义
NpcEvent.add_listener(124,"OnClick",OnClick)               124是NPC的Index,代表哪个NPC调用这个脚本

回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:56:49 | 显示全部楼层
跨日触发
函数原型:
def OnDayChange(args):
Sender=args[0]   

参数:
sender=args[0]   #玩家

功能:  
服务器跨天触发,主要用于清除或重置服务器日变量;每天晚上12点触发;

示例:
def OnDayChange(args):
Sender=args[0]
PlayerSetTempV(Sender,TK_WXDZ_ONOFF,0)    #需重置或清除的服务器日变量
Server.Envir.SEnvir.Log("隔天调用成功")
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:57:03 | 显示全部楼层
跨周触发
函数原型:
def OnWeekChange(args):
Sender=args[0]  

参数:
sender=args[0]   #玩家

功能:  
服务器跨周触发,主要用于清除或重置服务器周变量;每周的第一天晚上0点触发;

示例:
def OnWeekChange(args):
Sender=args[0]
PlayerSetTempV(Sender,TK_WXDZ_ONOFF,0)   #需重置或清除的服务器周变量
Sender.Connection.ReceiveChat("今天是周一了",MessageType.System)
Server.Envir.SEnvir.Log("隔周调用成功")
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:57:27 | 显示全部楼层
跨月触发
函数原型:
def OnMonthChange(args):
Sender=args[0]  

参数:
sender=args[0]   #玩家

功能:  
服务器跨月触发,主要用于清除或重置服务器月变量;每月的第一天晚上0点触发;

示例:
def OnMonthChange(args):
Sender=args[0]
PlayerSetTempV(Sender,TK_WXDZ_ONOFF,0)    #需重置或清除的服务器月变量
Sender.Connection.ReceiveChat("又是一个新的月份",MessageType.System)
Server.Envir.SEnvir.Log("隔月调用成功")
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:57:46 | 显示全部楼层
进入游戏触发
函数原型:
def OnStartGame(args):
Sender = args[0]

参数:
sender=args[0]   #玩家

功能:  
玩家进入游戏时触发回调;

示例:
def OnStartGame(args):
Sender = args[0]
for player in SEnvir.Players:
  if(player is None):
   continue
  player.Connection.ReceiveChat("玩家【{}】加入游戏".format(Sender.Name),MessageType.System)
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:58:00 | 显示全部楼层
离开游戏触发
函数原型:
def OnStopGame(args):
Sender = args[0]

参数:
sender=args[0]   #玩家

功能:  
玩家离开游戏时触发回调;

示例:
def OnStopGame(args):
Sender = args[0]
for player in SEnvir.Players:
  if(player is None):
   continue
  player.Connection.ReceiveChat("玩家【{}】离开游戏".format(Sender.Name),MessageType.System)
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:58:14 | 显示全部楼层
死亡触发
函数原型:
def OnDie(args):
Sender=args[0]  

参数:
sender=args[0]   #玩家

功能:  
玩家死亡时触发回调;

示例:
def OnDie(args):
Sender=args[0]
Sender.Connection.ReceiveChat("我死了",MessageType.System)
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:58:58 | 显示全部楼层
创建NPC
函数原型:
map.CreateNpc(...)    #map表示地图对象   

参数:
(int x, int y, int NpcIndex)
(int x,int y ,string NpcName)

x: x坐标
y: y坐标
NpcIndex: NPC的ID
NpcName: NPC的名字

功能:
在指定的坐标刷NPC,支持静态地图和副本地图

示例:

map.CreateNpc(25,23,'补给师')   #在地图的25,23 坐标刷出补给师的NPC
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27711

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

 楼主| 发表于 2021-7-22 21:59:22 | 显示全部楼层
删除NPC
函数原型:
map.DeleteNpc(...)    #map表示地图对象   

参数:
( int NpcIndex)
(string NpcName)

NpcIndex: NPC的ID
NpcName: NPC的名字

功能:  
删除指定的NPC,支持静态地图和副本地图

示例:

map.DeleteNpc('补给师')   #将地图里补给师的NPC删除
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|黑金论坛    

GMT+8, 2024-3-29 21:04 , Processed in 0.475727 second(s), 33 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.