设为首页收藏本站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
楼主: admin
打印 上一主题 下一主题

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

[复制链接]

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27729

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

58#
 楼主| 发表于 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

积分
27729

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

57#
 楼主| 发表于 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

积分
27729

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

56#
 楼主| 发表于 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

积分
27729

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

55#
 楼主| 发表于 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

积分
27729

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

54#
 楼主| 发表于 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

积分
27729

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

53#
 楼主| 发表于 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

积分
27729

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

52#
 楼主| 发表于 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

积分
27729

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

51#
 楼主| 发表于 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

积分
27729

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

50#
 楼主| 发表于 2021-7-22 21:52:54 | 只看该作者
脚本文件结构与概述

Scripts -- 存放全部脚本文件的目录

FuBen -- 存放全部副本相关的脚本文件

Item -- 存放全部道具相关的脚本文件

Mon -- 存放全部怪物相关的脚本文件

Npc -- 存放全部npc相关的脚本文件

Player -- 存放全部玩家相关的脚本文件

Ser -- 存放全部检查类脚本

main.py                     引用主系统(引用定义,加载并执行里边的脚本)  这个文件永远不能变更名字不能更换文件目录
loadstart.py               加载启动(直接服务端日志中显示各类自定义加载并执行脚本内容)
loadend.py                服务器加载(直接服务端日志中显示脚本加载是否成功)
Globals.py                 全局参数(一些参数设置,命令简化引用)
Defines.py                 定义变量(定义临时变量,全局变量) 每个变量代表一个行为,不同的行为适用不同的变量,变量值不能重复

MapEvent.py             地图触发                      不能变更名字不能更换文件目录
MonsterEvent.py       怪物触发或怪物AI        不能变更名字不能更换文件目录
NpcEvent.py              NPC触发                     不能变更名字不能更换文件目录
PlayerEvent.py          角色触发,角色函数   不能变更名字不能更换文件目录
ServerEvent.py          服务器触发                  不能变更名字不能更换文件目录
回复 支持 反对

使用道具 举报

658

主题

754

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27729

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

49#
 楼主| 发表于 2021-7-22 21:51:43 | 只看该作者
新版在/后面直接输入对应的颜色参数
{1红色/Red}  
{2淡绿/LimeGreen}  
{3土黄/Khaki}
{4淡灰/LightGray}
{5淡红/LightPink}
{6淡蓝/LightBlue}
{7中蓝/MediumBlue}
{8淡白/WhiteSmoke}
{9紫色/Purple}
{10绿色/Lime}
{11蓝色/Blue}
{12白色/White}
{13深紫/Magenta}
{14天蓝/Cyan}
{15黄色/Yellow}
{16黑色/Black}
{17棕色/DarkSalmon}
{18淡灰/DimGray}

旧版兼容145脚本原颜色赋值
{FCOLOR/1}颜色测试红色{FCOLOR/12}\
{FCOLOR/2}颜色测试淡绿{FCOLOR/12}\
{FCOLOR/3}颜色测试土黄{FCOLOR/12}\
{FCOLOR/4}颜色测试淡灰{FCOLOR/12}\
{FCOLOR/5}颜色测试淡红{FCOLOR/12}\
{FCOLOR/6}颜色测试淡蓝{FCOLOR/12}\
{FCOLOR/7}颜色测试中蓝{FCOLOR/12}\
{FCOLOR/8}颜色测试淡白{FCOLOR/12}\
{FCOLOR/9}颜色测试紫色{FCOLOR/12}\
{FCOLOR/10}颜色测试绿色{FCOLOR/12}\
{FCOLOR/11}颜色测试蓝色{FCOLOR/12}\
{FCOLOR/13}颜色测试深紫{FCOLOR/12}\
{FCOLOR/14}颜色测试天蓝{FCOLOR/12}\
{FCOLOR/15}颜色测试黄色{FCOLOR/12}\
{FCOLOR/16}颜色测试黑色{FCOLOR/12}\
{FCOLOR/17}颜色测试棕色{FCOLOR/12}\
{FCOLOR/18}颜色测试淡灰{FCOLOR/12}\
{FCOLOR/19}颜色测试淡黑{FCOLOR/12}\\
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 03:27 , Processed in 0.304850 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.