UID192389
帖子
精華
主題
積分26666
現金
積極性
威望
違規
熱心
推廣次數
閱讀權限30
註冊時間2009-8-29
在線時間 小時
最後登錄1970-1-1
TA的每日心情 | 怒 2017-1-18 12:17 AM |
---|
簽到天數: 512 天 連續簽到: 1 天 [LV.9]以壇為家II
|
本帖最後由 grass0916 於 2013-7-25 07:14 AM 編輯
腳本指令 (script command) : timerandom
指令作用
真正的亂數函數, 非從亂數表中取得, 採用時間亂數。
使用方式- timerandom( <int> ) ; // 回傳 1 ~ 該整數 之間亂數
複製代碼
路徑 : \src\map\script.c
找到 "struct script_function buildin_func[] = {" 此行, 於後一行加上- BUILDIN_DEF(timerandom,"i?"),
複製代碼
路徑 : \src\map\script.c
找到 "// NPC interaction" 此行, 於後一行加上- BUILDIN_FUNC( timerandom ) {
- srand( time( NULL ) ) ;
- if( script_hasdata( st, 2 ) )
- script_pushint( st, rand() % script_getnum( st, 2 ) + 1 ) ;
- return 0 ;
- }
複製代碼
創造原因 : eA 內建的 rand(), 並不是真正的亂數, 其實是用亂數表中取得, 並做一些 right shift 與 power 的運算,
藉以改變他的數值達到類似亂數的作法。
而本指令是取得本機 (server端) 的電腦時間精準度達毫秒, 用其數值來做運算達到亂數效果。
你可以在 mt1993ar.c 中看見 函數 genrand_int32 有一行 :- init_genrand(5489UL); /* a default initial seed is used */
複製代碼 這是從亂數表中取得的最佳佐證。
|
評分
-
查看全部評分
|