Project1
标题:
自由脚本通用许可证 draft 2010.09.03
[打印本页]
作者:
紫苏
时间:
2010-9-3 05:06
标题:
自由脚本通用许可证 draft 2010.09.03
本帖最后由 紫苏 于 2010-9-3 22:21 编辑
; ?& Z0 R0 ~8 ?; L* r
. I5 f1 X8 N3 d: n! n
这份草稿是根据大家最近对 FSL 的建议,在 DK 发布的原版 FSL 文档进行的全局改善,大家不妨看看还有什么问题。
$ u, L: R d3 F9 D7 A, ^5 B
% Q" M. s" d j5 t
修订:
2010.09.03 by 紫苏
0 D: j9 V, _8 R9 g9 N
License 的翻译从“协议”修正为“许可证”;
从许可证有效名称中去掉了“RGSS”一词;
“使用规范”修正为了“协议”;
全局范围内重新斟酌了用词,对相似的条款进行了排序、归类和整合;
去掉了原“使用规范”中的以下条款:
M( k7 \9 G( |# k2 P# L( ~$ X
二次发行的脚本必须向脚本原作者发布一个报告,不限制其是以电子形式或是物理形式;
如果是个人使用,你不需要向原作者报告。如果你想将你的修改作为一个补丁,那么你应该(但不是必须)向作者发送一份报告,以控制版本;
* ~/ z: o' E3 n# Y* @
9 v+ ^& n' m( x, N
' b, U! {5 k5 `: M& Z0 U
注:去掉那两条条款是因为附加条款已经控制了二次发行的权限以及修改后通知我的条款,如果有问题请及时提出,我们可以随时更新。
<html>
* g7 V5 W' h1 d, r) w6 u
<head>
/ c" E9 c. `. D6 h( J6 Y9 M/ X
<title>Free Script License</title>
& U) S7 n2 W% d# m+ ?/ c1 g+ Z) _
<style type="text/css">
3 @- q: D! q, V3 `' v: N$ X- u
.code {
3 X% s. S/ V2 ?: M/ V
max-height: 240px;
; q' m* C% k3 v0 G
font-family: 'Courier 10 Pitch','Courier New',monospace;
: O) o {) K) o& F; R! c
font-size: 13px;
% R+ S6 [/ S0 C
background-color: #dddddd;
! @; ~; y0 i, W& L2 j
overflow: auto;
; u% o0 G4 Z5 o9 \( u/ W1 \
border: 1px inset;
h5 l W* Z. K% Q9 @( P
padding: 2px;
) {! f6 J+ N) ]5 A/ ?. x; w8 T1 L
1 Q1 y% h# ]3 r- h/ X/ T( `
}
/ e; F9 S% Q& L+ V
.dashedBox {
; v9 E1 q: v* `8 [/ @
font-size: 16px;
& x/ h- ?* y' g$ U5 s
text-align: center;
) w8 f F" x9 _7 U
border: 1px dashed #cccccc;
& t6 O g$ K' |+ }
background-color: #eeeeee;
/ _1 r) k& p( O0 @) w0 j. k
overflow: auto;
/ j/ w: v& a+ T' U( P0 c
padding: 8px;
! N2 Z# j p7 S9 ?0 K" O, U
}
3 Y4 d* k* h! {6 P: |' I* p }
.revision {
% _+ l$ x2 V5 M; e1 f4 k
color: gray;
2 y/ W W* ]$ g9 R" b6 j
font-size: 13px;
( {, c- e/ O. H% X
}
! ?* }! X% [! q* x8 k# j$ ^" R
h1 {
4 i" I; m0 t* Z0 O
text-align: center;
4 \1 B! ^/ w2 S/ J
white-space: nowrap;
. R9 P% h! q- ]6 y) j9 L
}
+ j" L/ s+ f, e0 V s
pre {
6 A i# \6 Z$ R9 m
font-size: 16px;
8 A) G& P4 s6 G F% B! U7 `
}
! N* l4 F9 N( K; X* \# r2 J7 q
</style>
) e# m; ]6 ^) v
</head>
2 j+ P& K# R6 C- l
<body>
- X9 N7 {! a9 \5 w3 m
<h1>
* e7 E& b* X3 e' _ m5 Y
FREE SCRIPT LICENSE<br />
5 A( t* w+ U2 o1 |4 s
自由脚本通用许可证<br />
% b" S6 g3 o' i% I3 c" Y+ i- k/ [
draft 2009.09.03
2 \% l$ B# _! k: A9 p) v$ X0 O. D
</h1>
' D% k" J' ^4 D
& N" m2 N g: u$ O6 }! b' R/ P
<pre class="dashedBox">
* C% {! ^% q% x" n. V9 x8 K
此协议被作为下面的称呼是有效的(不区分大小写):
* J7 P; f8 w5 i0 g2 s& r7 `
) }' d- g+ Q9 Y$ ?$ t
<b><i>FREE SCRIPT GENERAL PUBLIC LICENSE
% D2 w+ r- N! W! C% Q/ ?9 ~3 H
自由脚本通用公共许可证
/ z, I; A: ^, Q( o; a
FREE SCRIPT LICENSE
2 x/ Q9 ?: z6 |# @! t* S
自由脚本许可证
. F5 S# o% g+ V4 u- x
FS-GPL
% o+ \: g% }( y) g, ^4 o
FSL</i></b>
* v0 `" t, g7 S- W( a# ~$ h+ k
</pre>
8 _ m% H* h$ {! U: b4 G2 L
. y* g, x# E# L# U4 O( {9 [
<div style="text-align:right">版权所有 FSL 标准委员会 2010-2011</div>
) g5 A5 N) K1 D8 D; P& _
6 K* F% b) o% t+ H' _
<h2>综述</h2>
`# ]( q' S4 a1 d: n1 Q7 J
8 g6 I# b! w) w$ F+ G# A! {6 \' z
FSL 协议由 FSL 标准委员会建立,任何 FSL 协议的更新将会由 FSL 标准委员会完成。FSL 只能在当地法律限制下起作用。
" G4 K1 w% Y6 F* r |+ z) ~' X
% Z3 T1 p& l4 j. G: E# ~$ I" W* h" W
<h2>协议</h2>
+ { |; G" O# a% R6 @5 d2 {" h
<ol>
7 P' y2 _) c- l; [/ v/ D
<li>在许可证附加条款允许的情况下,您可以使用、修改、传播、二次发行 FSL 协议下的脚本,也可用于商业目的;</li>
4 `& B* `5 E5 P. h+ F9 Y
<li>脚本原作者有权决定是否遵循 FSL,任何个人、团体、组织不得以任何形式强制将脚本加入 FSL,FSL标准委员会有权利拒绝不合法的 FSL 脚本;</li>
4 x" a" A0 `6 ^) \1 k2 C
<li>FSL 协议不歧视任何个人、团体、组织,即不能以任何方式拒绝符合规定的脚本遵循 FSL 及禁止相关个人、团体、组织行使应有权力;</li>
' T1 @" ^1 M- V" s2 q' y' J1 ]
<li>如果你负责的商业项目包含允许用于商业目的的 FSL 脚本,你必须:
2 u* C3 c7 p8 A5 ]6 k( z
<ul>
1 C$ B$ T# J6 _' _
<li>向 FSL 标准委员会以及脚本原作者发布一个报告,包含 FSL 脚本的信息;</li>
9 r n% V& H' C+ e
<li>保证 FSL 脚本的公开性(可将 FSL 脚本以可见形式附带在项目中,亦可引用一个 FSL 的链接);</li>
% ?4 K P' L- \. `$ c5 F
</ul>
4 e1 g: \+ g; a; J" e2 H( h1 I$ Z0 r
<li>FSL 脚本的二次发行版本将受限制于 FSL 协议;</li>
' }+ j8 _( E* N# J6 R* z" Q8 ^7 I
<li>FSL 脚本的译版受限制于 FSL 协议,并优先遵循 FSL 协议的译版;</li>
/ j o: \0 m; c0 t% E
<li>FSL 协议可用于任何脚本,主要但不限用于 RGSS/Ruby 脚本;</li>
' z; D4 s" g) S
<li>FSL 协议不对任何非 FSL 协议下的脚本有效。</li>
( r( |/ A; b" [ ?
</ol>
: b W6 t2 y' C$ y" z# K
, o# Q9 N# D3 r9 Q7 h
<h2>附加条款</h2>
+ a- { ^6 O+ u7 x- e
<pre>
; a/ i! i7 ?6 k1 f5 Y! n
我们在协议名称后面加上短横线和字母来表示附加条款。附加条款是脚本作者选择添加的可选条款。
0 L+ @1 _" [, H6 M8 A# J
. }3 \& C8 \) k
<b>-NCP 禁止用于商业目的(No use for Commercial Purposes)</b>
. K z3 _) E& x5 y, y8 w
作者不允许您将此脚本用于商业目的。
4 w( [* Z# g" e
. e! J9 N; A6 ]& ]- N
<b>-DNR 禁止二次发行(Do Not Republish it)</b>
; N" [$ B0 F# T$ X1 X! `6 Z
作者不允许您对此脚本进行二次发行(二次开发)。
( w6 K0 W# Y6 F' v6 ]5 m
; b3 R+ j8 b; [
<b>-NAM 修改后请通知我(Notify me After Modification)</b>
6 }& G! k9 E- V/ ~/ B2 _, {
作者希望您在修改或更新了此脚本后通知他/她。
8 m' K- ?# G0 H) @0 C% P) H
0 j, A& }) a1 X8 E9 U
<b>-STS 短期支持(Short Term Support)</b>
Z3 p! k/ M- i6 e% ?3 s3 E
作者不会长期对此脚本进行更新。
+ r4 E, o& n% `/ W6 o' Z
+ }& p: h( ~/ e
<b>-DOS 需要其它脚本支持(Dependent on Other Scripts)</b>
3 Y" d& e/ z) T2 g. T
此脚本依赖于其它脚本,请查阅作者提供的白皮书或说明文档/注释。</pre>
" N3 R5 U: `+ d( }* _4 i& h2 H! a( {
: R0 p6 o$ j6 }( t. X# ]( g
<h2>脚本编写中的自由与约定</h2>
1 }; `) H6 t: a, p: w8 A
这个约定只是为了规范脚本以达到美观,同时也可以方便使用者和开发者明白类的作用。你不必完全遵守,因为我们完全尊重你的自由!
4 A1 X4 Z: ~. m) }' z- M3 T( H6 f
<ul>
0 }& E, M, D0 A7 R( M
<li><b>不限制命名。</b>你可以使用任意合法的名字来为变量、常量等命名,不过我们更希望能和默认脚本保持一个较高的衔接程度,所以我们更喜欢下面的命名方式:
' s" u' o8 @) w1 @. O( ^
<p><table align="center" cellspacing="0" cellpadding="4" border="1">
& c( g4 L3 o) L% ]! z! |/ z8 s
<tr><td>类型</td><td>前缀</td><td>后缀</td></tr>
. r: d! `) P' A6 q! A' g1 T N- S
<tr><td>窗口类</td><td>Window_</td><td rowspan="4">无限制</td></tr>
$ N& E7 M! ^' l( B1 `# S6 ?& U
<tr><td>场景类</td><td>Scene_</td></tr>
- l8 T1 ]* ]1 {1 \ A# i2 ~- a
<tr><td>精灵类</td><td>Sprite_</td></tr>
- ~) m# S& }; Z: U2 P+ A+ g
<tr><td>游戏类</td><td>Game_</td></tr>
% @5 Y, ~% t" n2 M5 Y
</table></p></li>
9 u: ?1 j* I, |/ l3 A4 X0 z
<li><b>配置参数与用语高度集中化管理。</b>我们对于一些需要用户配置的信息高度集中管理,这样便于检索与修改:
2 s* t( k6 t! J* }9 @, m: H/ z+ c
<pre class="code">
0 K* H! @2 s8 k2 Q! U5 X: w$ A! z- w
<span style="color:gray"># 不要尝试运行这个例子</span>
; m: r( W& m8 k# N) d- N
<span style="color:blue">module</span> FSL
# Q/ x9 C3 \( G+ ]- y8 z
<span style="color:blue">module</span> YourGame
) i. Q! u i- @( N, {# ^0 I
START_STRING = <span style="color:brown">"开始游戏"</span>
! h2 T$ \6 u& ?1 q6 B: \
LOAD_STRING = <span style="color:brown">"继续游戏"</span>
3 u- {* U& f& V1 o2 j
END_STRING = <span style="color:brown">"离开游戏"</span>
7 ?% k( F# o) g# |( o- ~$ f T
<span style="color:blue">end</span>
( r) m9 a$ c' f* u( T
<span style="color:blue">end</span>
( Z7 \) d d8 g( a1 u8 R, S, Q- ~, W, E. W
) C; M) e) b6 j I7 {" g
<span style="color:blue">class</span> Your_Class
; _7 z% ^5 L1 q0 H
<span style="color:gray"># 你可以使用 include 来引用配置模块</span>
V G$ @: Z5 i5 T9 i. D
include FSL::YourGame
. Y" W% h% w% T' _* T
<span style="color:blue">def</span> initialize
( E% Z; W- V( z" A+ d
darw_text( 0,0,150,32,START_STRING )
. c. m$ o* ^. K% s; X* Q
darw_text( 30,32,150,32,LOAD_STRING )
8 K( e- o3 m8 x6 O5 ]1 c3 t
darw_text( 60,64,150,32,END_STRING )
5 |- x5 [- }2 b& e4 T. E
<span style="color:blue">end</span>
4 I+ o) u4 }. t: P
<span style="color:blue">end</span>
w* z4 ^0 K, I! C
</pre>
( L. |% a8 w4 M I2 E: N
</li>
0 ]6 h( b) a0 \2 e% i
<li><b>使用俗成的约定。</b>在Ruby中,对于方法有这样的约定,如果能遵守这些约定,将会给使用者与开发者带来便利:
4 O' Q2 ^" U* b: r1 x4 i) X/ N. o
<pre>
2 Y, t X9 |- O
method_name? 带有 ? 号的方法被称为“断言”(predicate),返回 true/false,甚至是 nil;
( P) K. J: U9 y2 d. r! c
method_name! 带有 ! 号的方法是破坏性方法(destructive),会对接收者进行原地运算;
0 ]+ ^6 N8 }* x: O6 U9 W' Z- v
method_name= 带有 = 号的方法是 setter,他会给同名的实变量赋值;
7 f' z% c( B$ P, H; U. ]
</pre>
: Y4 r2 m: `" g, u) [5 Q! h" _, ~
</li>
$ |: n( V3 b6 {. g( L7 ]! F& F* U
<li><b>为方法说明。</b>简要说明一下方法的用途和参数的相关信息,这会简化开发,当然,如果你愿意打这些字的话:
, B* T4 m" K! m/ c; {0 x
<pre class="code">
" i2 L8 w9 w' k: b7 Z
<span style="color:gray">#------------------------------------------------------
: h1 [' l4 {8 d$ i- B( l n& q
# ● 判定技能可否使用(需要的物品是否满足)
1 k5 U. i6 Z; k: C7 d% n |
# skill : 技能
0 d L( N4 U" I3 e0 U6 W. C
#------------------------------------------------------</span>
( W4 }2 ~: y1 L8 F7 y# a
</pre>
$ h) }+ i' T* m* U( y$ `
</li>
5 V0 A+ O( `. n( z* C& B
<li><b>兼容性解决方案。</b>我们使用了$fscript数组来考察兼容性,同时也可以为其他脚本提供扩展功能:
% O. T$ _. u2 F7 K; T
<pre class="code">
$ W- G6 a7 c- }7 N* J- b
<span style="color:gray"># A脚本登记的$fscript信息,A的版本是1.3.0518,存储在数组中</span>
- M$ T& `7 H& Z! g% W* E- |
$fscript = {} <span style="color:blue">if</span> $fscript == <span style="color:blue">nil</span>
7 r2 `8 D3 [. n
$fscript[<span style="color:brown">'A'</span>] = <span style="color:brown">'1.3.0518'</span>
8 u( H3 A# E, O( K3 ?" h" W W9 W
& c- b3 I& M% I2 h, |4 Y
<span style="color:gray"># B脚本登记的$fscript信息,B的版本是1.0.0000,存储在数组中</span>
( h1 T$ u8 O7 z' z+ h" N
$fscript = {} <span style="color:blue">if</span> $fscript == <span style="color:blue">nil</span>
% P+ E1 z& [7 t5 O& `. ~0 l n
$fscript[<span style="color:brown">'B'</span>] = <span style="color:brown">'1.0.0000'</span>
+ I+ ]/ _% |: T: V1 T+ ~
7 l7 E6 b- c' d$ G* p
<span style="color:gray"># 解决兼容性</span>
P- i4 k8 n$ {2 t; S* Q
<span style="color:blue">if</span> $fscript[<span style="color:brown">'B'</span>] != <span style="color:blue">nil</span> <span style="color:blue">and</span> $fscript[<span style="color:brown">'A'</span>] > <span style="color:brown">'1.2'</span>
8 o& K4 T/ R, c
solve
+ `6 Q: j$ O, X$ \6 G) p
[<span style="color:blue">else</span>
4 k. I/ x9 D/ w5 Y6 r$ A( c b
work]
7 u) x X4 x9 G4 M
<span style="color:blue">end</span>
4 Z9 M1 }$ y5 p
. { E% x/ T. L+ C4 }; ~
<span style="color:gray"># 或许可以提供扩充功能</span>
5 `8 O8 ^" q' r5 i+ }/ E9 i0 }
<span style="color:blue">class</span> A
7 D3 W* ?2 O1 S2 ]
<span style="color:blue">def</span> a_method
( s+ V$ ]1 u/ T& r1 ?; \4 x" w6 I
<span style="color:blue">if</span> $fscript[<span style="color:brown">'B'</span>] != <span style="color:blue">nil</span>
5 I# W: }+ ^) O- L" N. N$ Q
B.add_func( <span style="color:brown">'addition contents'</span> )
/ l) O' ~9 c% V4 ~3 V; ~
<span style="color:blue">end</span>
( C6 Q; E; ]. o5 z) G) h
<span style="color:blue">end</span>
& q3 X6 O: C' d* i. [7 h
<span style="color:blue">end</span>
& c$ c, I9 B+ }3 ~+ L" X
</pre>
" J' S$ ?- Y j+ w f% N# u
</li>
8 B$ y. C, Q- g5 i3 x. e
<li><b>脚本基本信息。</b>我们希望能在脚本中加入下面的信息,这些信息在脚本中以注释的形式存在:
9 u5 c& g5 w2 X, k0 J) c
<p>
+ s" y" _* S5 C, z! F
<ul>
3 G; Z* }/ Z, |# \
<li><b>更新作者:</b> 更新作者,第一位为原作者,依更新时间排序,最先更新最前</li>
- r' A2 _: a S
<li><b>许可协议:</b> 使用协议,示例:FSL</li>
) i1 y1 S( E1 n0 d2 f, X& S
<li><b>项目版本:</b> 版本号,格式为:主.次.build,示例:1.1.0714</li>
' I2 Z% k$ B" \/ W& z
<li><b>引用网址:</b> 脚本发布帖网址,用于获取最新的脚本,示例:http://www.myyxs.cn/fsl/</li>
+ S3 ?& R: X9 X/ m9 B& p: o
</ul>
. F+ M" Y3 Z) ?% K' y+ t+ p
</p>
S5 n* P: C' b) ~' ?
</li>
% }6 ]! r0 v; y8 T8 [1 X" w
<li><b>开发者白皮书。</b>如果你有时间的话,完全可以写一份开发者白皮书。这将指导其他程序员增强你的脚本。当然,这个也不是必须的。</li>
* L3 b+ a8 b) @& D V4 h, ~
<li><b>明确用法。</b>你必须明了的提出脚本的使用方法,哪怕只是简单的几个字。</li>
3 ?$ M" x. `% R% A/ _# L
<li><b>别名方法。</b>尽量使用alias来保证方法不会被覆盖:
. \" [7 ]7 k2 o$ ] i$ k3 {) y
<pre class="code">
) B4 M: y' {7 v/ p
<span style="color:blue">alias</span> new_method method
6 r- z2 U5 ^9 ?% ?# j: I
<span style="color:gray"># alias的另一种写法是参数都是Symbol</span>
0 z+ r; X) j9 |) }7 P8 r9 M
<span style="color:blue">alias</span> :new_method :method
7 J3 S& X! ]! o( J6 s# Q/ q5 C% K
<span style="color:blue">def</span> method
8 A b8 w" l N+ |" A# r
new_method
, y$ R* A6 Z0 M1 g- H& j
...
- C! O" ]- W. T3 N6 o! [2 f
<span style="color:blue">end</span>
9 q7 u+ ?6 F8 z7 f
</pre>
9 G: U: m0 ?6 ]4 B( S1 j; [3 L
</li>
3 G# j# C4 L% ]8 M- Y
</ul>
' t1 ^8 R3 V" E% W# a
* k1 M, M& O1 k5 ^
<h2>关于发行</h2>
2 x; B' F. q+ f1 b, s$ L E
H( N+ w, ~) g
<ul>
) [$ O, _1 {9 z" _% {$ `& J8 ]
<li>二次发行
$ t [) r* _/ ]0 Z4 N. Z9 }: [- J
<p>二次发行需要通过修改不小于35%的代码,从而可以达到一个相对独立的脚本的发行方式。脚本的修改者将成为二次发行脚本的项目主管,而脚本的原作者将不会对二次发行的脚本负责。</p>
' T) m7 |/ u% M& ^. o- J3 A, U) V
</li>
9 f9 K$ T' w8 o# m* N7 }4 a
<li>修补臭虫
4 E+ C0 {# J9 Y2 t
<p>如果你对脚本的修改与功能的添加,不但想适用于您个人,您可以考虑将这个修改作为一个臭虫修复或者功能升级发布在网路上,作为原脚本的一个升级。</p>
* n, c0 }7 G% |9 o: p6 q- `
</li>
$ p4 c# Q6 ^& U; s* Z q: n
</ul>
! M7 R; A, P! ~! O4 Z* V; Y
& g# T3 I2 e/ s* j
<div class="revision">
, Y) T2 t/ s% A1 D' Q. A
修订:<ul>
% f" D& ]* C$ S
<li>2010.09.03 by 紫苏
" z- R7 O8 x4 z
<ul>
; g! }+ F# \- G# g! B
<li>License 的翻译从“协议”修正为“许可证”;</li>
7 g# ~4 ~0 {4 G$ d/ ~7 c% @: Z
<li>从许可证有效名称中去掉了“RGSS”一词;</li>
, h" v) n0 r6 u: b2 X
<li>“使用规范”修正为了“协议”;</li>
9 X4 X! g+ X% l; w9 ~0 a4 q& ?
<li>全局范围内重新斟酌了用词,对相似的条款进行了排序、归类和整合;</li>
* H2 U$ t8 |* c2 _2 Y
<li>去掉了原“使用规范”中的以下条款:</li>
8 l; ^* G) c" Q" [! Y
<ul>
9 }" J* z& X- `# d5 y. q! t9 s9 w6 l
<li>二次发行的脚本必须向脚本原作者发布一个报告,不限制其是以电子形式或是物理形式;</li>
, I- K2 @# P! {6 y% J
<li>如果是个人使用,你不需要向原作者报告。如果你想将你的修改作为一个补丁,那么你应该(但不是必须)向作者发送一份报告,以控制版本;</li>
" r% z7 S$ M- P( Q* Y
<ul>
1 R' s' Y* ` N$ a4 x7 w* M3 S7 v
</li>
0 }- g" H9 Y( ]8 N7 t' @
</ul>
k& `& d, w& D
</li>
P! L8 T3 x+ a6 Z, ~
</ul>
0 G' s5 G) ~0 K7 {* s) k) u) U
</div>
' x" u9 z( B( Q! w N/ p
</body>
8 t" `; X( g3 S6 E0 C
</html>
复制代码
新建一个文本文档,将以上代码复制粘贴进去,保存,重命名文件,使其扩展名变为 htm 或 html,然后即可用浏览器浏览
作者:
DeathKing
时间:
2010-9-3 19:49
直接改就行了,委员会嘛~~
2 D3 v0 q1 B" f/ I9 e
不过,2009年09月03日 O_O
作者:
紫苏
时间:
2010-9-3 22:19
但感觉还是有不少处需要斟酌……如果没有问题的话就可以替换之前的了
5 Y1 W$ b$ N2 N ]! x
& x" ^( Q4 z$ Z4 e: e, O) j
[line]1[/line]
# N! M! U/ b( t+ f" [: ^
我勒个去,活昏头了,2009……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1