找回密码
 点一下
查看: 1712|回复: 20

关于不管是在测试地图时,还是在连网游戏时随机数序列都一样的问题...

[复制链接]
发表于 2009-7-9 03:49:31 | 显示全部楼层 |阅读模式
RT...
最近做图测试时发现

不管是在WE中测试地图(使用固定随机种子选项 没有钩选)
还是在HF VS 中连网 测试.. 每次的随机数都一样..

RT 貌似是最近使用了WOW8的WE后才出现的问题.
有高人遇到过么?如何解决?
发表于 2009-7-9 11:32:10 | 显示全部楼层
这个就发触发来看看再说..
回复

使用道具 举报

 楼主| 发表于 2009-7-9 12:01:36 | 显示全部楼层
囧了..我新建了张新地图随机数就米问题的说...
但是原来的地图还是8行...

代码在这:

function Trig_PlayerHeros_Actions takes nothing returns nothing
local boolean array b
local integer i = 0
local integer j = 0
local integer r = 0
local unit lu = null
local player p
    set udg_HeroList[1] = 'H002'
    set udg_HeroList[2] = 'H00F'
    set udg_HeroList[3] = 'H005'
    set udg_HeroList[4] = 'H00I'
    set udg_HeroList[5] = 'H00K'
    set udg_HeroList[6] = 'H00N'
    set udg_HeroList[7] = 'H00O'
    set udg_HeroList[8] = 'H00R'
    set udg_HeroList[9] = 'H00T'
    set udg_HeroList[10] = 'H00V'
    set udg_HeroList[11] = 'H00X'
    set udg_HeroList[12] = 'H006'
    set i = 1
    loop
        exitwhen i > udg_Max_Player
        set p = NToP(i)
  //      if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING  then
            call AdjustPlayerStateBJ(GetRandomInt(200, 275), p,PLAYER_STATE_RESOURCE_GOLD)
//           loop
               set r = GetRandomInt(1,12)
     //           call Debug("R:"+I2S(r),5)
       //         exitwhen b[r]==false
         //   endloop
      //      set b[r] = true
      call Debug("R="+I2S(r),5)
            set lu = CreateUnit(p,udg_HeroList[r],GetLocationX(GetPlayerStartLocationLoc(p)),GetLocationY(GetPlayerStartLocationLoc(p)) ,90)
            set udg_Heros = lu
            
            call TriggerRegisterUnitEvent( gg_trg_Select_Unit2,lu, EVENT_UNIT_TARGET_IN_RANGE )

            call SelectUnitForPlayerSingle(lu, p)
            call StoreIntegerInUnit(lu,"SkillPoint",5)
            
            call AdjustPlayerStateBJ( 15,p, PLAYER_STATE_RESOURCE_LUMBER )
            set j = 1
            loop
                exitwhen j > 20
                call ModifyHeroStat( GetRandomInt(0,2),lu,bj_MODIFYMETHOD_ADD,1)
                set j = j + 1
            endloop
//       endif
        set i = i + 1
    endloop
endfunction

这触发是在地图初始化时执行的
R = RandomInt(1,12)

不管在什么情况下都是一样的序列...
囧了..
回复

使用道具 举报

发表于 2009-7-9 12:05:21 | 显示全部楼层
换游戏开始0.01秒试试
回复

使用道具 举报

 楼主| 发表于 2009-7-9 12:10:47 | 显示全部楼层
游戏开始0.01秒依然如此..
但是把同样的代码复制另外一张地图就没事了..
回复

使用道具 举报

 楼主| 发表于 2009-7-9 12:12:47 | 显示全部楼层
个人猜想是不是在地图某某地方有设置是否使用固定随机数种子的东西
找个一个SetRandomSeed的函数 但是没有发现这个函数出现在 自己地图的war3map.j里~ 新建一个地图也找不到~~ 或许在其他文件中嗯?
回复

使用道具 举报

发表于 2009-7-9 12:45:14 | 显示全部楼层
这个地图还有其他地方有随机数么?是不是也固定呢?

如果不固定的话,把相关语句删掉重写试试看呢
回复

使用道具 举报

 楼主| 发表于 2009-7-9 20:57:02 | 显示全部楼层
不仅仅一一条T的问题。
=.=! 难道遇到传说中的RPWT了?
回复

使用道具 举报

发表于 2009-7-9 21:01:33 | 显示全部楼层
嘛~嘛~
也许是长相问题……
捂脸光速逃。
回复

使用道具 举报

 楼主| 发表于 2009-7-9 21:22:07 | 显示全部楼层
囧死了~~
回复

使用道具 举报

 楼主| 发表于 2009-7-9 21:24:23 | 显示全部楼层
十分无语..

我把代码精简成

function Trig_PlayerHeros_Actions takes nothing returns nothing
//local boolean array b
local integer i = 0
local integer j = 0
local integer r = 0
local unit lu = null
local player p
local integer array HeroList
    loop
        exitwhen i > 6
               set r = GetRandomInt(0,11)
                call Debug("R:"+I2S(r),5)
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_PlayerHeros takes nothing returns nothing
    set gg_trg_PlayerHeros = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( gg_trg_PlayerHeros, 0.01 )
    call TriggerAddAction( gg_trg_PlayerHeros, function Trig_PlayerHeros_Actions )
endfunction


这样...还是固定的随即数...
FK..
回复

使用道具 举报

发表于 2009-7-9 22:56:41 | 显示全部楼层
太神奇了,不愧是能叫boss的人物
回复

使用道具 举报

发表于 2009-7-9 23:01:48 | 显示全部楼层
还没解决?
那么换T试试
很奇怪
本来说了句就去玩古墓丽影10 了..悲剧的玩法..尸体流摔死~~~~
回复

使用道具 举报

 楼主| 发表于 2009-7-10 02:48:47 | 显示全部楼层
崩溃了....
单人窗口化测试中发现
如果在地图载入过去中使WAR3失去焦点.那么肯定是固定的随机数.反之则可以出现随机数.
在连网测试依然是固定随机数=.=! 伪随机也不要伪成这个程度口呀...
回复

使用道具 举报

发表于 2009-7-10 03:03:42 | 显示全部楼层
同样建议用T试试~虽然没啥希望
口牙打成口呀了~
回复

使用道具 举报

发表于 2009-7-10 10:48:26 | 显示全部楼层
或许和游戏未开始有关?(main函数是loading时进行的)

我所知道的是,在config函数中的随机是伪随机,比如SetPlayerTeam(p,GetRandomInt(0,1)),每次结果都是一样的,除非前面加SetRandomSeed,但由于没法调用系统时间,所以还是不能随机的
回复

使用道具 举报

 楼主| 发表于 2009-7-10 11:19:48 | 显示全部楼层
继续深入排错左...可惜不会用OD等调试工具.能用用排除法看看了
这次米打错了口牙~
回复

使用道具 举报

 楼主| 发表于 2009-7-11 20:43:29 | 显示全部楼层
解决老..貌似是应该在地图初始化的时候使用call PolledWait()所致~
回复

使用道具 举报

发表于 2009-7-11 20:56:32 | 显示全部楼层
这种情况我也出现过..
  主要是由于你出发中某些触发的顺序弄反了...
我上次就是这样...把其中两条的触发弄反了..
结果就出现不能随机出现在地图里面,而是老出现在固定的地点...
回复

使用道具 举报

发表于 2009-7-15 11:15:42 | 显示全部楼层
引用第17楼Boss于2009-07-11 20:43发表的  :
解决老..貌似是应该在地图初始化的时候使用call PolledWait()所致~
我比较懒
直接读取目标玩家外,其他2名玩家的名称
然后把字符串转整数

看起来,也满随机的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-7-22 00:22 , Processed in 0.031747 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表