Project1
标题:
只是一系列建议(FSL改进)
[打印本页]
作者:
chinvo
时间:
2010-12-21 13:19
标题:
只是一系列建议(FSL改进)
本帖最后由 chinvo 于 2010-12-21 13:22 编辑
" Y& e$ f% _) A5 w0 B2 n
* \3 k& n) w" Y5 s6 J
改进建议#1
7 p5 Z* W/ T2 E+ W7 L
针对第一条:
& p j! m! Z/ R
原文如下:
' M/ Z. f" p; v9 t6 q
01、只能是脚本原作者才能决定是否遵循FSL,而任何个人、团体、组织不能以任何形式和方式强制将脚本加入FSL,FSL标准委员会有权利拒绝不合格的FSL脚本;
4 j Z) N h- ?+ h
改为:
6 d8 _. K8 w7 Q6 K t
01、仅脚本原作者才能决定是否遵循或使用FSL,而任何除脚本作者外的个人、团体、组织在未经脚本原作者授权的情况下不能以任何形式和方式强制将脚本加入FSL,FSL标准委员会有权利拒绝不符合标准或本协议的FSL脚本;
5 r9 j, x' ]$ f1 o
这一点,有人认同么?
作者:
沉影不器
时间:
2010-12-21 20:54
提示:
作者被禁止或删除 内容自动屏蔽
作者:
DeathKing
时间:
2010-12-21 21:55
打算重新起草,协议(宣言)和标准分开。希望听听各位的意见。
L1 z5 t$ a0 U' L: M$ o2 S
( H. H+ z! C' r; J& w' U
将“协议”改为宣言是受《敏捷宣言》的启发,更像是非强制性的,号召性的。
1 a" M4 G. D) d2 D
' c3 b0 H9 _1 J6 G8 ]8 V& @
将协议和标准区分开,是为了保持协议本身的简洁。现在已经听到对GPL过于臃肿的抱怨,因此,我们需要一个简洁、简明、简易的协议!
- _% W$ | o0 C' J/ B% r+ y
: a& P# b% a- \3 T
作者:
chinvo
时间:
2010-12-22 16:04
本帖最后由 chinvo 于 2010-12-24 10:22 编辑
7 p: [5 m: m4 D, y9 W3 \. J& K; H
/ O7 }- ?3 O" S
FREE RGSS SCRIPT GENERAL PUBLIC LICENSE
( h/ n, M v$ H: L z
自由RGSS脚本通用公开协议
, H, Y' e+ _! S2 i& m4 }
?
* k+ I: i9 T9 a) L0 m" Z5 A7 M
?
`8 z9 c" l' c$ ^3 \
此协议被作为下面的称呼是有效的(不区分大小写):
' t6 P& C3 J, A
?
1 @" f6 I" u9 P( ?8 o# `
FREE RGSS SCRIPT GENERAL PUBLIC LICENSE
0 v6 B7 a P3 l1 K2 z1 s% O) k
自由RGSS脚本通用公开协议
" J; ~6 D+ C) ?* g5 R3 ~9 a
FREE SCRIPT LICENSE
* W3 z% o$ ?# _! \, a/ i$ v
自由脚本协议
: [ u# y* f9 @. s
FRS-GPL
. Z# j$ N2 B/ g) ]( F! X8 G
FSl
c# G/ b) X" P( G( a, [9 ^/ K
?
0 ]7 h* {: H3 S9 Q% s
版权所有FSL标准委员会 2010-2011
5 |7 K' Z1 l; j% N5 d
?
! F" d5 U, [" @8 H+ Y
?
" H, N9 V8 m, `! A# m
§综述
; @: @" K( V( Z* e. H1 ]
?
^9 R, n5 c6 e! s# p9 M
FSL协议由FSL标准委员会建立,任何FSL协议的更新将会由FSL标准委员会完成。FSL只能在当地法律限制下起作用。
5 P- S) E S% C4 J
?
" E' J/ _/ ]& B- J' I2 `2 p4 G' u; I
?
- X1 @3 v8 C6 `' o: ]
§使用规范
, ]( m2 E6 R8 M. U) ^1 v
?
' v2 R' j9 R* U( _- j; @7 H. ^. H
FSL提供了一个自由的脚本使用环境,但你必须遵守下面的规范:
' l) N5 z- S3 A# [! ~
?
. t( o* ~8 W9 K A: D( ?2 d' c: I! y
?
J" R, M8 T( ^) Q
01、仅脚本原作者可以决定是否遵循FSL,任何作者以外的个人、团体、组织在未经授权的情况下不能以任何形式和方式强制将脚本加入FSL,FSL标准委员会有权利拒绝不服合本规范的FSL脚本;
" x7 l& i3 p' x. U( f, `6 v# l3 P& h3 Y
?
5 ?& r" ]1 s4 ]+ H! b
02、你可以使用、修改、传播、二次发行遵循FSL的脚本,也可以在征得原作者同意的情况下用于商业用途;
( D& k. s4 U( F" W" i7 I
?
0 l, z; }& I$ f( W7 J% y
03、对于用于商业用途的脚本,你应该向FSL标准委员会以及脚本原作者提交一个报告,这个报告必须包含用于商业用途的脚本的名称、内容及使用这个(些)脚本的项目的名称及简介,用于商业用途的脚本必须经得脚本原作者的许可;
# j! p0 M! [; w% J$ g; p
?
3 v7 Q" x/ y( B. u3 Z
04、使用FSL的商业项目,必须保证FSL脚本的公开性:可以将FSL脚本以可见的方式附带在项目中,亦可以引用一个FSL脚本的链接;
1 ~8 [, ]' U' v) N
?
3 N7 |6 A/ X0 }- H3 D
05、二次发行的脚本必须向脚本原作者发布一个报告,不限制其是以电子形式或是物理形式;
D, r4 l: j7 [
?
' c) r& B: _# |1 V5 C. U2 [
06、如果是个人使用,你不需要向原作者报告。如果你想将你的修改作为一个补丁,那么你应该(但不是必须)向作者发送一份报告,以控制版本;
2 f4 \( F# h6 A
?
! Y Q* W6 i. a$ Z% a7 k- G$ A8 L
07、FSL协议不歧视任何个人、团体、组织,即不能以任何形式和方式拒绝符合规定的脚本列入FSL和阻止其行使应有权力;
: s$ ]2 Z! f p$ A
?
1 c" L B( t# _% K7 i
08、FSL脚本的二次发行版本将受限制于FSL协议;
& _# U: `; M" m b2 Q7 F
FSL脚本的译版受限制于FSL协议;
1 \6 F0 C m6 H6 F- G
?
0 B- n- s% F9 ?7 p3 m1 @" E5 o
09、FSL协议不会影响到于FSL脚本一同工作的非FSL脚本,即,FSL协议不会对和FSL脚本一起工作的非FSL脚本起作用;
) P. a9 m6 ^& w6 g( @9 d8 O
?
4 ]7 k# U$ e) O8 r' U
10、FSL协议可用于任何脚本(包括但不限于RGSS脚本),只要脚本的原作者愿意,即可列入FSL;
" O- }, f, f6 o9 l. k
?
, r" z* o; r5 E& D
11、FSL脚本的译版优先遵循FSL协议的译版;
: B- I. P6 ? Q" f2 ~5 ]
?
! l) l# s. n. t! l8 q% Z: f; n
?
0 z C$ u' Q8 C4 f' t+ D% k4 B
?
$ c9 C7 `: p4 L! I8 G) ^
§附加条款
: L n6 @1 A+ }7 c* q
?
3 |/ [$ q: m; Z' Q! s
我们在协议名称后面加上短横线和字母来表示附加条款。
w/ d1 F' B1 r. _# ?
?
' g$ T. f( ]% ]9 g3 W; _" x5 q9 o
?
: f H% a; y2 n' U. y# `2 U# H5 e
-DNB 不允许用于商业活动(Do Not use it in Business)
' O, O4 l* s& C) N5 L% p2 N
这个标识表示作者并不希望您将这个脚本用于商业用途及活动。
. o9 ?0 _9 o4 [0 I' s, k/ u
5 {/ y- K1 ~. Q+ n6 b4 e+ f
-DNR 禁止二次发行(Do Not Republish it)
, m6 U' o8 s& [6 M+ m3 G
在这个标识下,你不能二次发行脚本
1 h+ @ |/ b7 J, {0 v
?
5 y! r+ G. t6 J' |
-TEE 修改后请通知我(Telled mE after Edited)
8 d; c$ r8 a9 s3 ~- v$ g
如果您修改了带有这个标识的脚本,请向脚本作者发送一份报告。脚本原作者密切地关心着这个脚本。
; S, w0 n" B! ?
?
1 j M+ @. q, R6 j4 z! J8 t
-STS 短期支持(Short Term Support)
1 }9 @. v1 a5 X
原作者不会长期对此脚本更新,这个脚本的维护在一小段时间后或许将交给其他程序员。
g2 x$ `, S" A4 M0 g, G6 g& ~
?
J9 N/ A& X, R& c
-NOS 需要其他脚本(Need Other Script)
3 L* G7 t' Q4 a' W; O+ r/ f$ @
这个脚本依赖于其他脚本,请检查次条款的参数。
1 ~0 T2 B, ]3 W5 o+ Z. E
?
4 F0 E* }: d9 K7 ^3 B
?
; O% t- R1 J! F2 k: _/ y1 Y; s- f
?
, u; E0 d- t: ~" B& S
§脚本编写中的自由与约定
* Y8 I7 U& n& C; s! ]$ A
?
0 p5 j, X# ~0 K, ~# w* j! \
这个约定只是为了规范脚本以达到美观,同时也可以方便使用者和开发者明白类的作用。你不必完全遵守,因为我们完全尊重你的自由!
1 l7 `0 P: r0 A" v' \& q
注意:这里的例子仅针对RGSS脚本。
0 E2 j4 E" Z% o4 i- V5 {
?
8 T) e. E# R7 i2 G3 x
?
; m% S) M2 p1 B7 L
01、不限制命名。你可以使用任意合法(服合脚本解析器规则)的名字来为变量、常量等命名,不过我们更希望能和默认脚本保持一个较高的衔接程度,所以我们更喜欢下面的命名方式:
+ Z$ z0 U9 r3 ?3 K
?
6 v1 l# ?3 X( H+ c
类型
0 U( W7 P1 F6 x; u
前缀
$ G2 S) n( W, r1 X- C! S- P t7 M
后缀
# }. t5 s- Q* G' P& D
窗口类
4 Q6 W7 |4 w3 ?* Y% L# F. V( p
Window_
2 R1 B9 Z4 e+ [; c
无限制
r" [3 b/ k! B: U. {1 O
场景类
6 ]+ j; `; I7 a* Q b" e7 @
Scene_
; ~2 b# A/ _; K" d3 ]* r: p
精灵类
' q% {3 L. A0 @7 ~8 N; m% j
Sprite_
& o" a" \! s5 F3 R4 l- {. A# v6 O
游戏类
! c/ X. g7 q# i- y& x# S3 M
Game_
0 M3 j1 A5 k/ O! i: N; v9 G4 J
?
5 T% p8 _$ m" R3 y/ E* y, o" K6 h
02、配置参数与用语高度集中化管理。我们对于一些需要用户配置的信息高度集中管理,这样便于检索与修改,这种方式就像下面这样,他存储在FSL::Conf模块中
; Z5 E. B) T- B
?
* A6 y6 y1 @4 n% X+ R
# 不要尝试运行这个例子
3 y- _8 r7 o _9 R. d$ ]
module FSL
' W$ c- H9 J: ~- ^$ T! H
module Conf
$ Z2 M ?" R3 @' J1 _& T1 t
module YourGame
9 T8 n! ~- X5 i5 d2 [* \& F
START_STRING = "开始游戏"
+ ` V2 b8 `+ D/ P X
LOAD_STRING ?= "继续游戏"
% l: B+ G9 A1 W7 w) ^
END_STRING ??= "离开游戏"
- {2 {6 g5 M: F3 R2 Y) p
end
' G) _9 Q6 C6 q" a+ u
end
" F% Y0 h6 T1 h% O
end
$ U4 h/ o4 S$ [& q# u! K: i5 X
?
: q5 R! ^4 p2 J% X
class Your_Class
1 }+ n+ ^5 Q! Q; s+ d) J7 x
# 你可以使用include来引用配置模块
: |7 @; _) W" g" o# [: L- r( ~7 J
include FSL::Conf::YourGame
& Z5 ^+ M& `) c( M) g" F
def initialize
0 \" g+ l( o! E. r# T/ E4 z
darw_text( 0,0,150,32,START_STRING )
* v0 ^1 n$ J) D" z7 K5 B$ b$ J) e" }
darw_text( 30,32,150,32,LOAD_STRING )
3 M. n3 h- v$ z e8 ?. J7 A
darw_text( 60,64,150,32,END_STRING )
) V! T& i7 M% L& L; X
end
0 d+ D. V" g& [& B5 h/ r S
end
! g* N% `( z1 w' F6 A. P- @! k
?
6 b6 z& W* E$ ]2 T3 g
03、使用俗成的预定。例如,在Ruby中,对于方法有这样的约定,如果能遵守这些约定,将会给使用者与开发者带来便利:
' p- D8 v' {; ^" M# b5 L4 g
?
2 S6 i3 _* \7 V/ F" p; B/ |- c
method_name? 带有?号的方法返回true/false甚至是nil;
& B5 T- N4 {- U( |! ]; z3 h; r
method_name! 带有!号的方法是破坏性方法,使用要谨慎;
% b1 l+ t P. [0 Z
method_name= 带有=号的方法是setter,他会给同名的实变量赋值;
5 v4 A1 H S" i, K
?
. L( S% \* G+ V& z" s3 x
04、为方法说明。简要说明一下方法的用途和参数的相关信息,这会简化开发,当然,如果你愿意打这些字的话:
% I' y- D% u. M$ f/ ]7 v
?
7 d8 t6 c ~0 e) w; l2 ]+ J/ E; u
#------------------------------------------------------
3 W$ K9 O6 @8 u
# ● 判定技能可否使用(需要的物品是否满足)
' p J4 M7 P/ T; m
# skill : 技能
4 `6 R$ o% O j8 r: M
#------------------------------------------------------
# k. q& \9 L5 @! W c
?
: T* r7 y, @4 x# n" u. c" S
05、兼容性解决方案。在RGSS脚本中,我们使用$fscript数组来考察兼容性,同时也可以为其他脚本提供扩展功能:
) p: ^2 @5 ~/ {# l/ d# D
?
# B! L/ y7 r1 k, \9 ^. H
# A脚本登记的$fscript信息,A的版本是1.3.0518,存储在数组中
( A6 t; q% a$ _* O
$fscript = {} if $fscript == nil
6 U+ X0 G/ C, c% m$ [# O0 M$ i
$fscript["A"] = "1.3.0518"
& y' s8 G$ Y+ `6 w* Y
?
/ H- X- ], V8 d+ b
# B脚本登记的$fscript信息,B的版本是1.0.0000,存储在数组中
% u5 o' J2 t+ e4 H$ Z4 \2 o
$fscript = {} if $fscript == nil
8 r# Y4 b+ b2 e2 l+ J% W
$fscript["B"] = "1.0.0000"
1 i( `# T; W) n
?
' D( ~; Y, `. p/ ]- ^- x) y; q
# 解决兼容性
7 d0 U @6 ]% \+ t9 U0 m
if $fscript["B"] != nil and $fscript["A"] > "1.2"
9 A6 ^) J5 a" C: b. E
solve
! A) P7 a% N2 D+ {
[else
+ Q$ E2 w6 J. E/ D- F
work]
* g. P. h1 n8 ^5 K7 H
end
, g8 t+ `) d9 }2 Z! C+ b6 o
?
5 u% Y. @- \! a* X3 B
# 或许可以提供扩充功能
2 }. e1 G* ?. ?' Y$ F$ S
class A
% Y# b0 k# N! @1 i7 t7 B1 I
def a_method
* q( Y6 b o6 N9 e- ]* r) ]5 d* N
if $fscript["B"] != nil
) v8 g4 i; Z' {# I7 V6 m# n5 O3 J7 @
B.add_func( "addition contents" )
1 Q- z0 Z3 g9 M3 [$ k
end
* W* i7 a$ K6 y' e- ^
end
& T+ `( G1 r" G& S) f& \ U$ v3 Q
end
& R; B( b- \0 p6 y
?
& Z% u+ u7 N& r& i* Z8 X3 @
06、脚本基本信息。我们希望能在脚本中加入下面的信息,这些信息在脚本中以注释的形式存在:
- E w7 g- b9 m! S6 ^" T4 j
?
4 V8 g7 @3 R- |
项目名称: 项目的名称,示例:按键跳跃(JumpSkill)
5 f! B* Y3 R7 G% w
更新作者: 脚本的更新者,第一位则是脚本的原作者,更新者按时间顺序降序排序
! J4 Y, |- T. E: ]& @) p5 [6 I
(后期更新者排在后面)
5 w7 i, [/ c" ?1 |0 c7 V4 E' S! T
许可协议: 脚本的许可协议,示例:FSL -DNB -TEE
( a, r2 J9 X E& z, j
项目版本: 项目的版本,主版本.次版本.更新日期,示例:"1.0.0718"
7 K6 Y0 V2 x2 W
项目分类: 项目的分类,示例:VX/角色辅助
0 y4 a* @4 c) Y3 O8 h! c
衍生关系: 脚本二次发行衍生关系,示例:RATB::SuperRATB
' A. h. g3 {5 R
建立日期: 建立日期,年/月/日,示例:2010/6/15
6 M5 J# ?! G( V4 h3 m( u( D4 r# V
最后更新: 更新日期,年/月/日,示例:2010/12/21
/ D- g' q" H! Y- M
引用网址: 引用的网址,示例:h t t p: //w ww.my yxs.c n/fsl/
2 _; K+ u# A- E) E3 F6 d
?
( l( W) z8 }0 v
07、开发者白皮书。如果你有时间的话,完全可以写一份开发者白皮书。这将指导其他程序员使用或增强你的脚本。当然,这个也不是必须的。
7 X# [5 M( M9 I1 v, r
?
1 p8 p! l% P# G* ]- A5 g" J
08、明确用法。你必须明了的提出脚本的使用方法,哪怕只是简单的几个字。
g5 S( f* \" B" R$ Q
?
+ D8 R/ f" U) s) Y
09、别名方法。在RGSS脚本中尽量使用alias来保证方法不会被覆盖:
4 A+ c5 H& a- f5 S z" f
?
8 r& G; Z2 [/ U6 d* Q, e: D
alias new_method method
: T S3 t' j8 S8 {- `
# alias的另一种写法是参数都是Symbol
' c. u. u- k( D# B5 s& K
alias :new_method :method
; f% S) b6 S3 a5 }- c4 s
def method
+ _. n( N8 j, z( G
new_method
# w: c. J# p8 Y' W2 d Q+ I0 S
...
* u2 \. n$ [3 |6 `. j" X
end
Y% _, u: H+ M' N, G, w3 w- t& u
?
( J, ` i6 B& Q6 Q) J
?
* C# X6 X$ V2 ]7 T
§关于发行的一些问题
, T% e1 @* L- E" w' Z) v# n. b
?
4 ?7 y+ D3 p8 o" ~) x+ D' [
01、二次发行
! K" ~9 J2 w( @ m" g
二次发行不同于一般修改发行。
; I9 [/ a5 R, |; U! ]
二次发行需要通过修改不小于35%的代码,从而可以达到一个相对独立的脚本的发行方式。脚本的修改者将成为二次发行脚本的项目主管,而脚本的原作者将不会对二次发行的脚本负责。
) S9 |/ g9 S' T/ j9 G- @
?
. v. V" F% V& G; T* E1 j. u: T
02、修补臭虫
8 g& T: A+ S1 i5 m* F
如果你对脚本的修改与功能的添加,不但想适用于您个人,您可以考虑将这个修改作为一个臭虫修复或者功能升级发布在网路上,作为原脚本的一个升级。
! U8 V5 K: O! W1 E- P
该升级必须遵循原脚本的许可协议及附加条款。
6 i$ W; F7 }' X9 V7 ?/ [' e
?
, `9 `6 {8 D. }+ K. j
?
& \1 I3 u1 N# T0 }) R- X: M
?
8 G7 ^6 }3 n5 B' y. Z
修改:ChiNvo (at) FSL标准委员会 2010/12/21
% U: o# g& M1 k( J' q5 l3 U. L
, |* i( Y9 S& x5 D# N/ v
修改了部分语句,更加严谨,没有错字!
作者:
chinvo
时间:
2010-12-22 16:08
其中,MEE(Maile mE after Edited)改为TEE(Telled mE after Edited)
作者:
chinvo
时间:
2010-12-24 10:22
@苏小脉 是的,因为Google group上不去,又懒得翻墙
作者:
苏小脉
时间:
2010-12-24 12:43
回复
chinvo
的帖子
2 k; w4 }- B1 o( Q2 K: E
. ~- X8 H7 p' u! T, i; j
在论坛这个群组里就有,《自由脚本通用许可证 draft 2010.09.03》这贴,里面有 HTML 源
作者:
chinvo
时间:
2010-12-24 13:25
回复
苏小脉
的帖子
& H# S- ~8 G" y
$ o, k- _+ L& O4 G! H
到fs-gpl.tk注册了个账号,可以在那里更改么?
作者:
苏小脉
时间:
2010-12-24 23:22
回复
chinvo
的帖子
4 Z b! t& k- E& V
: O- T+ h! {0 d" f4 k( e( P h- |
当然,那个 WIKI 就是为了这个而建的
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1