Jail: Create

Creating a jail with EZJail PrefaceAlthough you can maintain your FreeBSD jails manually and there are quite a few tutorials around, I like the implementation done through EZJails. It’s assumed you have completed installing FreeBSD and EZJail. Creating/Starting a JailTo create the jail we need to create an alias for the network interface, issue the ezjail-admin create command w/flavor, and finally start the jail: ifconfig lnc0 192.168.1.50 netmask 255.255.255.255 alias ezjail-admin create -f standard www....

2009-10-24 · 2 分钟 · admin

twisted知识

一、Twisted基本模型 Twisted 网络编程框架是一种基于事件的网络编程框架,用户需要继承特定的类,并重载其中的方法来处理网络通信 中可能出现的各种情况。 Twisted的网络通信模型 最基本的也要由三部分组成:反应器(reactor)、协议(protocol)、工厂(factory)。 1、其中反应器reactor用来执行事件循环,分发事件处理等 等,每个应用程序中一般只能启动一个reactor。 2、协议用来完成与一个已经连接成功的主机的交互功能,主要有数据的接收和发送功能。连接的断开事件也可以在这 里处理。注意是在连接建立之后protacal才开始负责下面的工作的。 3、工厂负责与一个协议的启动和关闭功能,而且还负责在连接成功时生成一个协议对象,(by gashero)用于与远程主 机的交互功能。 一个典型的Twisted应用程序会建立至少一个协议,可以从twisted.internet.protocol.BaseProtocol类或其子类继承 。协议还需要实现数据的接收处理,即收到数据之后需要做出何种响应。比较简单的Twisted应用程序可以继承一个空 的工厂,来自 twisted.internet.protocol.Factory或其子类。工厂至少应该指定protocol属性,指向协议类。最后 就是要启动事件 循环,根据连接方向的不同,可以选择用reactor的connectXXX()或listenXXX()方法,然后执行 reactor.run()启动 事件循环。 二、协议模型 所有协议类的基类是 twisted.internet.protocol.BaseProtocol,但是一般使用其子类。不同的协议子类提供了不同 的数据接收方法,如 LineReceiver子类就允许同时使用行和原始数据两种方法接收数据,使用非常方便。 BaseProtocol的接口如下: class BaseProtocol: connected=0 #是否已经连接了 transport=None #用于数据发送的传输对象 def makeConnection(self,transport): #建立连接的方法,不是事件方法,一般不要重载 def connectionMade(self): #连接成功事件,可重载 可以看到BaseProtocol可以理解为一个虚基类,实现的功能十分简陋。实际的应用程序一般也不是直接继承BaseProtocol来实现协议,而是继承Protocol类。Protocol类提供了基本完善的协议功能,接口定义如下: class Protocol(BaseProtocol): def dataReceived(self,data): #接收到数据事件,可重载 def connectionLost(self,reason=connectionDone): #连接断开事件,可重载,依靠reason区分断开类型 从Protocol类继承就可以完成协议的基本处理了,包括连接的建立和断开事件,还有数据接收事件。 三、工厂模型 相对于协议,工厂可以发挥的空间就很小了。所有工厂的基类是twisted.internet.protocol.Factory。这个类定义了三个方法,接口如下: class Factory: protocol=None #指向一个协议类 def startFactory(self): #开启工厂 def stopFactory(self): #关闭工厂 def buildProtocol(self,addr): #构造协议对象,并给协议对象添加一个factory属性指向工厂,可以重载 从 这里可以看到,工厂类中最重要的部分就是protocol属性,将这个属性设置为一个协议类(注意不是协议对象),就 可以将这个工厂设置为对应协议的工厂 了。前两个方法控制工厂的开启和关闭,用于资源的初始化和释放,可以重载 。buildProtocol()方法可以控制协议对象的生成,(by gashero)如果需要多传递一个属性,可以重载,但是重载时应...

2009-10-23 · 1 分钟 · admin

开始正式步入广州

在珠海呆了两个多月了,今天正式进入广州,中午到了这边下午就开始找房,不过结果还不错,这都归于陈公子的英明神武哦呵呵。 不过还不知道在这里能呆多久,本来印象对这个城市没有什么好感的,但今天稍改变一下,感觉也还可以,没有像人说的那么恐怖呵呵,不管了,先睡了,明天还要尽快呢,累死了。

2009-10-11 · 1 分钟 · admin

python的logging [转自python mail list]

我们知道在java或者.net中大部分都是使用apache的log4…, python里面本身就自带了logging模块。同样在django中也可以用: 1.Setting.py中设置 LOG_FILE = "log.log" 2.创建utils/log.py: import logging from django.conf import settings def getlog(): logger = logging.getLogger() hdlr = logging.FileHandler(settings.LOG_FILE) formatter = logging.Formatter('%(asctime)s %(levelname)s % (message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.NOTSET) return logger 3.使用: from utils import log log.getlog().debug("dddddd") 你就可以看到你的django project的根目录下有一文件log.log 2007-02-13 07:02:07,780 DEBUG dddddd 更多参考: http://www.onlamp.com/pub/a/python/2005/06/02/logging.html On 2/13/07, map...@gmail.com wrote: 我们知道在java或者.net中大部分都是使用apache的log4…, python里面本身就自带了logging模块。同样在django中也可以用: 嗯嗯嗯!比俺使用的聪明,俺是生硬的直接使用 每个需要的py 中: import logging logging.basicConfig(level=logging.DEBUG, format='[%(asctime)s]%(levelname)-8s"%(message)s"', datefmt='%Y-%m-%d %a %H:%M:%S', filename='bo_update.log', filemode='a+') ... logging.debug("Line: %s updated..." % (line_ref)) 实际应用时建议使用...

2009-10-08 · 1 分钟 · admin

接收邮件的smtpserver

一个可以接收邮件的smtpserver. 收到的邮件被存为一个eml格式的文件,可以用outlook打开。 注意: 需要事先配置域名,指向这台机器所在的IP。免费的动态域名(如花生壳)也可。 #encoding:utf-8 from datetime import datetime import asyncore from smtpd import SMTPServer class EmlServer(SMTPServer): no = 0 def process_message(self, peer, mailfrom, rcpttos, data): filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'),self.no) f = open(filename, 'w') f.write(data) f.close print mailfrom,rcpttos,'%s saved.' % filename self.no += 1 def run(): foo = EmlServer(('0.0.0.0', 25), None) try: asyncore.loop() except KeyboardInterrupt: pass if __name__ == '__main__': run() 转自 http://www.javaeye.com/topic/382229

2009-10-05 · 1 分钟 · admin

django Admin管理界面的激活方法,The Django Admin Site problem(No module named urls)

problem description: 1,向你的模型添加admin metadata 并不是所有的模型都可以或者应该被admin用户编辑,所以你需要标记那些需要管理界面的模型 上一章的Book模型添加一个管理界面的方法就是: class Book(models.Model): title = models.CharField(maxlength=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() class Admin: pass Admin声明标记这个类拥有一个管理界面,在Admin之下你可以配置许多选项 目前我们采用默认值,所以我们使用pass来表示Admin类是空的 如果你正在按这个例子写自己的代码,现在给Publisher和Author类添加Admin声明是个好主意 2,安装admin模型,简单的把"django.contrib.admin"添加到你的INSTALLED_APPS设置里 然后运行python manage.py syncdb来安装admin使用的额外的表 注意,在你第一次运行syncdb时,你很可能被问起是否创建一个superuser 如果那时你没有创建superuser,你需要运行djang/contrib/auth/bin/create_superuser.py 来创建一个admin用户,否则你就不能登录到管理界面里去 3,把URL模式添加到urls.py,如果仍在使用startproject创建的工程,admin的URL模式可能 已经在那儿了,但是被注释掉了,你的URL模式应该像这样: from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls')), ) 就这样,现在运行python manage.py runserver来启动服务器,你将看到如下信息: Validating models… 0 errors found. Django version 0.96-pre, using settings ‘mysite.settings’ Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C....

2009-09-30 · 1 分钟 · admin

mydns-ng mydns 的后继版

无意间在 ports 看到 mydns-ng MyDNS-ng is a free DNS server for UNIX. It was implemented from scratch and is designed to serve records directly from an SQL database (currently either MySQL or PostgreSQL). MyDNS-ng is based on MyDNS originaly writen by Don Moore bboy@bboy.net Oficial Site http://mydns.bboy.net. MyDNS is licensed under the GNU General Public License. 以后可以用它了

2009-09-30 · 1 分钟 · admin

在Windows上安装Python+MySQL 的常见问题及解决方法

验证是否已经安装了MySQLdb: ========================================================== d:\usr\local\Python25>python Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] onwin32 Type "help", "copyright", "credits" or "license" for more information. >>> import MySQLdb Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named MySQLdb ========================================================== 如果有类似于上面的"No module named MySQLdb",表明MySQLdb尚未安装或安装的不成功! MySQL 版本:5.0.67 下载地址:http://dev.mysql.com/downloads/mysql/5.0.html#downloads 下载exe文件并安装 ========================================================== Python 版本:2.5 下载地址:http://www.python.org/download/releases/2.5.4/ 下载msi文件并安装 MySQLdb版本: MySQLdb Windows binary for Python 2.5 下载地址:http://biohackers.net/wikiattach/Python2(2e)5/attachments/MySQL-python.exe-1.2.1_p2.win32-py2.5.exe 参见:http://forums.mysql.com/read.php?50,129618,140611#msg-140611 常见问题: 1.无法定位程序输入点 mysql_server_init 于动态链接库 LIBMYSQL....

2009-09-28 · 2 分钟 · admin

nginx做透明代理

resolver 208.67.222.222; server { listen 8080; location / { proxy_pass http://$http_host$request_uri; } } 真是简单了,

2009-09-23 · 1 分钟 · admin

BOM--字节序标记

读代码的时候看到这样一段 $template_content = str_replace("\xEF\xBB\xBF", ‘’, $template_content); 不知道是何作用,经过一番查找资料,终于解开了这个疑问 资料如下: 在window下面用记事本编辑文件的时候,如果保存为UNICODE或UTF-8,分别会在文件的开头加上两个字节“\xFF\xFE”和三个字节“\xEF\xBB\xBF”。在读取的时候就可能会遇到问题,但是不同的环境对这几个多于字符的处理也不一样。(其他的文本编辑工具也存在这个问题,但是可以选择去除bom,如editplus的设置:参数选择->文件->utf-8, 选择总是删除签名) 如果前面三个字符“\xef\xbb\xbf”则保存格式是utf-8 如果前两个字符是“\xff\xfe”则保存格式是Unicode Unicode规范中有一个BOM的概念。 BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。 UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件的编码方式的。 容易导致header session_star ob_start的问题,utf-8编码的文件中,BOM占3个字节,由于php设计时没有考虑BOM的问题,这三个字节会直接输出,如果这时在程序里调用了session函数,就会出问题了 附:文件应该使用 Unicode (UTF-8) 编码保存。同时不要使用 字节序标记(BOM) 。与 UTF-16 和 UTF-32 不同,UTF-8 编码的文件不需要指明字节序,而且 字节序标记(BOM) 在PHP中会产生预期之外的输出,阻止了应用程序设置它自己的 头信息。应该使用Unix 格式的行结束符(LF)。

2009-09-23 · 1 分钟 · admin

VMware server序列号

VMware Workstation4.5.2 Build 8848 for Windows ZHDH1-UR90N-W844G-4PTN6 G1NP0-T88AL-M016F-4P8N2 VMware-workstation-4.5.2-8848 for Linux ZC14J-4U16A-0A04G-4MEZP J1WF8-58LDE-881DG-4M8Q3 VMware Workstation 5 For Windows LUXRM-WP0DN-A256U-4M9Q3 DJXDR-NDT27-Y2NDU-4YTZK VMware Workstation 5 for Linux DA925-HP80U-Z8HDC-4WXXP 3KW2W-AYR2C-88M6F-4MDQ2 VMware.GSX.Server.3.1.0-9089.for.Windows 98XY4-54VA4-4216V-4PDZ6 WH0M5-XW50J-WA4FU-4MTZ3 VMware-gsx-server-3.1.0-9089.for Linux N218N-NR66R-F0JDF-4P9NP H2W8H-X82DC-J8N6G-4M9Q6 VMWare ESX Server 2.x 0VHD0-0P86V-0C0AH-4018N SMP 0KR08-02CAH-0DJ2H-48124 02M8R-0HA2N-0CK8M-42JAN SMP 0AMDE-0UWFP-0E601-42J84 VMware Ace 1.0.0 admin:8H18E-8U505-HA14Z-4P8QL RCT0X-XHN8U-H20FY-4W9ZP player:WC94X-3H90R-K05DU-4MTN3 DHHF8-K0P6P-Z25DY-4YENK workstation:TKN8T-1UD2Q-70N4C-4YXXQ AJMMN-3YUDP-8ANFG-4WWX2 VMware VirtualCenterV1.2.0 [attach]1150[/attach] VC管理GSX的SN: QU9HW-NM5FT-VAJ4G-5W9N3 VHM05-U0Q27-E0HFA-5WRXL virtualcenter 最全和最强的license virtualcenter : 921H4-7WR4V-T2NDC-5YDZK vmotion : 8VN44-Q8PD9-P0NFY-5PWZL esx: XL584-9PH2Z-02H4C-5P9XL gsx: EH8M0-5RP8Y-M804F-5MRN3...

2009-09-10 · 1 分钟 · admin

Python代码加密 源码保护--pyc文件'字节码'

内容概要:Python代码加密,源码保护,代码保护,pyc文件 关于python代码保护在网上好像一直没有很好的介绍,可能和PYTHON的设计初衷"开源"有关,但越来越多的兄弟写的加入PYTHON阵营,开发工具用途各异,在商业应用中代码保护就变的重要了. 下面介绍一下发布PYC文件,做简单代码保护 PYC文件是什么? pyc文件是python的二进制编译,pyc文件比py文件拥有更快的装载速度,执行速度没有区别。 因为pyc文件是二进制文件,不是明文显示,利用这一特性,发布PYC文件隐藏源代码. 命令如下: python -c “import compileall; compileall.compile_dir(‘目录’)” 该命令可以为一个目录下的py文件生成pyc文件(包含子目录) 在windows平台上的路径书写方式为(‘C:/python26/pyc’) 下面符一完整命令: 将目录’C:/python26/pyc’下的所有PY文件 转为PYC文件 python -c "import compileall; compileall.compile_dir('C:/python26/pyc')" 如果想实现真正的加密代码,就要改PYTHON源码,做自己的加密模块了,这方面还没深入了解,不便多说. 关于代码加密这块如哪位兄弟还有更好的方法,请多指教. Python代码加密,源码保护,代码保护,pyc文件 转自http://blog.alexa-pro.cn/?p=349

2009-09-09 · 1 分钟 · admin

错误734:PPP链接控制协议终止

今天无聊拿手机和电脑蓝牙连接通过 gprs 上网试一下,不料确遇到这个错误,在网上找了一下 在硬件设备里面找到手机MODEM的驱动,点属性,找到额外初始化命令,填入 AT+CGDCONT=1,"IP","CMNET" 不错,可以正常上网了,不过我的上网方式不区分 wap 和 net 所以用的 net 呵呵

2009-09-05 · 1 分钟 · admin

精华游戏算法整理——关于SLG中人物可到达范围计算的想法

关于SLG中人物可到达范围计算的想法 下面的没有经过实践,因此很可能是错误的,觉得有用的初学朋友读一读吧:) 希望高人指点一二 简介: 在标准的SLG游戏中,当在一个人物处按下鼠标时,会以人物为中心,向四周生成一个菱形的可移动区范围,如下: 0 000 00s00 000 0 这个图形在刚开始学习PASCAL时就应该写过一个画图的程序(是否有人怀念?)。那个图形和SLG的扩展路径一样。 一、如何生成路径: 从人物所在的位置开始,向四周的四个方向扩展,之后的点再进行扩展。即从人物所在的位置从近到远进行扩展(类似广宽优先)。 二、扩展时会遇到的问题: 1、当扩展到一个点时,人物的移动力没有了。 2、当扩展的时候遇到了一个障碍点。 3、当扩展的时候这个结点出了地图。 4、扩展的时候遇到了一个人物正好站在这个点(与2同?)。 5、扩展的点已经被扩展过了。当扩展节点的时候,每个节点都是向四周扩展,因此会产生重复的节点。 当遇到这些问题的时候,我们就不对这些节点处理了。在程序中使用ALLPATH[]数组记录下每一个等扩展的节点,不处理这些问题节点的意思就是不把它们加入到ALLPATH[]数组中。我们如何去扩展一个结点周围的四个结点,使用这个结点的坐标加上一个偏移量就可以了,方向如下: 3 0 2 1 偏移量定义如下: int offx[4] = { -1, 0, 1, 0 }; int offy[4] = { 0, 1, 0, -1 }; 扩展一个节点的相邻的四个节点的坐标为: for(int i=0; i<4>int nodecount=0; //AllPath数组中的点的个数(包含待扩展节点和已经扩展的节点 int cutflag=0; //用于划分已经扩展的节点和待扩展节点 NODE temp; //路径中的一个点(临时) temp.x=pRole[cur]->x; //假设有一个关于人物的类,代表当前的人物 temp.y=pRole[cur]->y; temp.curmp=pRole[cur]->MP; //人物的最大MP AllPath[nodecount ]=temp; //起始点入AllPath,此时的起始点为等扩展的节点 while(curflag=MAP_MAX_WIDTH|| temp.y<0>=MAP_MAX_HEIGHT) continue; //出了地图的范围 if(pMap[temp.x][temp.y].flag) continue; //已经扩展了的结点 //经过了上面几层的检测,没有问题的节点过滤出来,可以加入AllPath AllPath[nodecount]=temp; } pMap[AllPath....

2009-08-22 · 1 分钟 · admin

RPG&SRPG伤害式计算方式杂谈

以下的损伤式,如果没有特别指明的话,一般讨论的都是普通物理攻击的损伤。魔法攻击、特殊攻击暂不考虑。 基本型: 损伤=攻击力-防御力 其中,攻击力一般要分为人物自身的攻击力和武器的攻击力,所以又有: 损伤=人物攻击力+武器攻击力-防御力 防御力当然也可以分为人物的和防具的: 损伤=(人物攻击力+武器攻击力)-(人物防御力+防具防御力) 但也有个别游戏在这里选择了简化。最典型的就是FE系列。 这种基本型的一个重要之处,是人物攻击力和武器攻击力的重要性要平衡好。 以FE为例,人物部分最大值在20~30左右,而武器也一般在这个数值附近。使得二者的作用基本是对半分,其中武器的值一般略低于人物的值。 而且因为FE的数值都偏小,加上必杀的大损伤、敌人的能力值不十分高、武器的损耗等因素,使得一些初级的武器能一直使用到后期。比如776中,攻击力只有6的铁剑就能一直比较活跃。 反之,如果游戏中的人物能力值数值很高,变化很大,而损伤公式仍然是基本型的话,则存在一个武器不断替换的问题。 比如SN3,人物的能力值由开始的几十升至最后的几百,在人物能力值不同提升的同时,装备也一批一批的被更换。游戏最开始时入手的是攻击力只有十几的武器,而到最后入手的武器攻击力均在二百左右。如此的话,初期和中期入手的武器在后期是肯定不会考虑使用的。造成了武器之间的强弱等级差别很大,略失真实性。但更多的RPG都情愿采取这样的模式,因为装备的不断替换更能体现出RPG的育成、增强的感觉。 基本型的损伤式看似简单,但实际游戏中往往还要加上各种系数修正。最常见的是乱数的修正,而像SN3般虽然没有乱数影响,却也有着攻击方向、高低差、距离等因素影响,其结果并非都像FE般能比较精确地预测。 关于防御力: 防具的防御力还好理解,人物自身的防御就实在很难解释是怎样的一个概念……再强的肌肉,在刀剑面前也不见得能有多少抵抗力。所以有不少游戏采取的是只有防具防御力,没有人物防御力的做法。但仍然有很多的游戏保留着人物的防御力。看着穿布服的人用肉身承受数十下刀砍,真不知道是什么感觉>_ 人物的力气和武器攻击力之间的作用关系,也一直是一个很难解释清楚的地方。按基本型的算法,只需2者之和超过对方的防御力,即使其中一者低到何种程度,也确实能给对方造成损伤。不过也有着很多游戏,对武器攻击力和人物攻击力采取的是不同的算法,这就是下面要介绍的系数型…… 系数型: 人物攻击力和武器攻击力的平衡是损伤公式相当重要的一个环节。系数型与基本型最大的区别就在这里:系数型中,人物攻击力和武器攻击力不再是简单的相加关系,而是将人物能力对攻击力的影响作为系数作用在武器攻击力之上。 如下便是系数型最基本的形态: 损伤=(武器攻击力-防具防御力)×人物能力系数 这样的基本公式,被FF系列数代所采用。 系数型的计算比基本型略为复杂,损伤结果更难预测,尤其是数值比较大时更是如此。 但其实从设计者的角度,系数型的数值设定却不一定就比基本型的复杂。 系数型和基本型的区别,主要在如下的一些方面: 1、基本型自始至终都要控制好人物能力和装备能力之间的关系,而系数型因为将这二者的算法分开,便能将这二者由不同的角度去控制。 拿776来说,如果将攻击力为6的武器换为攻击力12的武器,给损伤带来的影响仍然会因为使用者的力气而有很大区别。如果人物的力为6,那么损伤增至原来的150%。但如果人物的力为20,则损伤的增加仅为原来的123%。 但对系数型来说,武器攻击力由6变为12,则意味着损伤一定是原来的200%。就是说武器攻击力的变化和人物能力的变化是比较独立地分别作用在总损伤值之上的。 2、通过控制不同时点获得的武器和防具,能将(武器攻击力-防具防御力)这一项始终稳定在一个范围之内,再通过能力值对攻击系数和HP上升这2者关系的影响公式,就能最终保证在所有数值不断增加的同时,损伤值能比较稳定地得到平衡。而正是武器攻击力和防具防御力直接作用的这个特点,为游戏带来了这样的特性:一旦防具防御力高于武器攻击力,无论系数多大,也不会有任何影响了,损伤固定为0。一般在系数型的公式算法下,高防御力的作用更容易被突出。如果是基础型的公式,尤其是那种忽略了人物防御力的公式,很容易出现到了后期各项数值都很高时,防御力的作用越来越被减弱的现象。 用系数型损伤式的游戏,最典型的就是FF9。FF9中人物能力系数在很多情况下就直接等于人物的力气值。 FF5也是系数型的代表,不过跟FF9相比,系数值除了力气的影响外,还加入了人物等级的影响。这是很多RPG,尤其是现在难度越发偏低的RPG惯用的方法。因为FF系列的能力成长很多都不是采取跟等级同步上升的方式,损伤有了等级的直接影响,对于一些不太熟悉系统的玩家,最起码还能靠练级来直接增强实力-_- FF5的基本物理、魔法攻击系数计算式: 物理系数:(LV×力/128)+2 魔法系数:(LV×魔力/256)+4 最后附加的2和4可以看作系数的基本值,作用是保证攻击威力的程度,不至于lv、力/魔力都很低时完全没有损伤。 RPG和SRPG的区别: 跟RPG不同,SRPG往往会要求对损伤有比较精确的计算。损伤值如果由系数型计算,能比较方便的产生很大的损伤数值,但同时也会给喜欢精确计算的玩家带来一定的麻烦。 不过作为SRPG的FFT使用的也是这样的系数式。出现在FFT中的武器攻击力和人物的AP值(相当于系数)都很小,整个流程中基本都是在几到十几的范围。 简化型&综合型: 之前提到过有简化了防御力,将人物防御力去掉的损伤式。 不过更有直接把防御力都去掉,损伤式只剩攻击力的类型。 FFT便是没有防御力概念的系数型,防御的作用是增加HP。 不过游戏中的实际公式除了攻击力、防御力这些最基本的概念外,往往还要加上很多的附加项。 其实上面这样的分类是十分不严谨的。 FM4没有防御力的概念,也没有人物能力值的修正。如果按上面的分类,将是最简化的形式: 损伤=武器攻击力 但实际的公式,却有着很多其他的修正项: 损伤=武器攻击力×武器等级修正×属性修正×特技修正×Chain修正×格斗出力修正×敌方技能修正×(1+RND) 像这样每项系数相乘的公式还是很容易理解的。不过有更多的情况是在不同地方有相加也有相乘的复合公式。下面我们具体看看几个损伤公式的例子。 FFTA: 损伤=武器攻击力×(总武攻-敌总武防/2)/100 总武功=人物攻击力+武器攻击力 总武防=人物防御力+防具防御力 FFTA的损伤式比较特别的地方是,武器攻击力在计算中使用了两次,其作用被提升到了最重要的地位。武器攻击力间的差别很大,由最低的十几,到最高的87,整整相差了好几倍。而防具的防御力,仅仅只能作为跟人物防御力相加后的系数项的一部分,之后还被除2,完全放到了被忽略的地位。人物间因为不同职业成长而产生的人物攻击力差距,也不能很好的得到体现。 TO: [(人物攻击力+武器攻击力)×攻击系数+人物防御力×防御系数]×抵抗系数 TO的损伤式是出名的复杂的,不过稍加归纳后,也可以写成如上的简洁形式。最终的损伤值还要加上乱数和攻击方式的影响。 人物攻击力一项,是:人物STR+人物DEX/2 武器攻击力是:武器STR+武器DEX/2 人物防御力是:人物VIT+人物STR/2 两个系数的影响项很多,攻击系数有:地形修正、地形属性修正、必杀修正、武器属性修正、天候-性格修正、天候抵抗、得意武器修正、对龙效果、恐怖效果、支援效果,如此多项。防御系数则少一些。影响项很多,但一般比较需要留意的也就是地形效果、武器属性等几项而已。 抵抗系数指RES,有防具的影响,也有攻击方武器属性和被攻击方人物属性的影响,作用是对整个基本损伤值按一定比例的减轻。 感觉TO的公式更多的是从设计的角度而不是数值的角度去考虑,数值的平衡性也确实有着一些问题。比如武器的攻击力是和人物攻击力直接相加,但武器攻击力一般只有3、40左右,人物攻击力后期却高达数百,使得选择武器时武器的攻击力完全放到了被忽略的位置上。 FF6: FF6的魔法损伤式很FF5的很类似,但物理损伤式却出奇地复杂: 基本损伤=武器攻击力+(等级^2×(武器攻击力+人物力气×2)/256×3/2) 损伤=基本损伤×防御修正 防御修正=(255-防御力)/256+1 武器攻击力的最大值为255,而人物力气×2的最大值也仅255。这样的公式使得等级对损伤值的影响十分大。而任凭基本损伤一项再大,如果防御力有255,防御修正项也会使得攻击基本无效化。这点其实跟TO的防具防御力处理是很类似的。 VP: 损伤=[(人物攻击力+武器攻击力)×武器的攻击信赖度-敌方防御力]×各种修正值 本身就很高的武器攻击力,加上各种系数相乘后达到很夸张的损伤值,是VP的一大特色。 VP后期也有着明显的人物攻击力和武器攻击力不平衡的问题。武器攻击力过万,而人物攻击力不过一千多,人物间的攻击力差距更是被忽略……...

2009-08-22 · 1 分钟 · admin