找回密码
 点一下
楼主: 血戮魔动冰

Hashtable教程~

[复制链接]
 楼主| 发表于 2009-11-2 18:21:38 | 显示全部楼层
LS不是应该看完了全文吗?
……………………
回复

使用道具 举报

发表于 2009-11-2 18:38:36 | 显示全部楼层
哦..那时头目发 那个1.24变化 那贴
里面 我有提了下思路 (那时没写出代码.)
回复

使用道具 举报

发表于 2009-11-2 19:03:56 | 显示全部楼层
引用第40楼血戮魔动冰于2009-11-02 18:21发表的  :
LS不是应该看完了全文吗?
……………………
是看了
问题是我记得你的表达应该是这个样子啊
回复

使用道具 举报

发表于 2009-11-2 19:22:30 | 显示全部楼层
先把ReturnBug给搞掉 GC暂时可以共存 GC的得全改过来挺费时的
回复

使用道具 举报

发表于 2009-11-3 18:16:54 | 显示全部楼层
哎?原来T和CJ的参数顺序是相反的啊。T当中的SaveReal中的参数是(Value as Childkey of Parentkey in Hashtable),而CJ里头却是(Hashtable,Parentkey,Childkey,Value)这样的顺序……
回复

使用道具 举报

发表于 2009-11-3 18:24:12 | 显示全部楼层
嗯,既然小血大人已经把CJ贴出来了,我想把BJ也贴出来吧。虽然BJ的用途没有CJ大,不过多少会有点用的……
[jass]// Hashtable value types
    constant integer   bj_HASHTABLE_BOOLEAN                 = 0
    constant integer   bj_HASHTABLE_INTEGER                 = 1
    constant integer   bj_HASHTABLE_REAL                    = 2
    constant integer   bj_HASHTABLE_STRING                  = 3
    constant integer   bj_HASHTABLE_HANDLE                  = 4
    hashtable          bj_lastCreatedHashtable     = null
   
function GetHandleIdBJ takes handle h returns integer
    return GetHandleId(h)
endfunction
function StringHashBJ takes string s returns integer
    return StringHash(s)
endfunction
function TriggerRegisterDestDeathInRegionEvent takes trigger trig, rect r returns nothing
    set bj_destInRegionDiesTrig = trig
    set bj_destInRegionDiesCount = 0
    call EnumDestructablesInRect(r, null, function RegisterDestDeathInRegionEnum)
endfunction
function InitHashtableBJ takes nothing returns hashtable
    set bj_lastCreatedHashtable = InitHashtable()
    return bj_lastCreatedHashtable
endfunction
function GetLastCreatedHashtableBJ takes nothing returns hashtable
    return bj_lastCreatedHashtable
endfunction
function GetLastCreatedHashtableBJ takes nothing returns hashtable
    return bj_lastCreatedHashtable
endfunction
function StoreRealBJ takes real value, string key, string missionKey, gamecache cache returns nothing
    call StoreReal(cache, missionKey, key, value)
endfunction
function StoreIntegerBJ takes integer value, string key, string missionKey, gamecache cache returns nothing
    call StoreInteger(cache, missionKey, key, value)
endfunction
function StoreBooleanBJ takes boolean value, string key, string missionKey, gamecache cache returns nothing
    call StoreBoolean(cache, missionKey, key, value)
endfunction
function SaveRealBJ takes real value, integer key, integer missionKey, hashtable table returns nothing
    call SaveReal(table, missionKey, key, value)
endfunction
function SaveIntegerBJ takes integer value, integer key, integer missionKey, hashtable table returns nothing
    call SaveInteger(table, missionKey, key, value)
endfunction
function SaveBooleanBJ takes boolean value, integer key, integer missionKey, hashtable table returns nothing
    call SaveBoolean(table, missionKey, key, value)
endfunction
function SaveStringBJ takes string value, integer key, integer missionKey, hashtable table returns boolean
    return SaveStr(table, missionKey, key, value)
endfunction
function SavePlayerHandleBJ takes player whichPlayer, integer key, integer missionKey, hashtable table returns boolean
    return SavePlayerHandle(table, missionKey, key, whichPlayer)
endfunction
function SaveWidgetHandleBJ takes widget whichWidget, integer key, integer missionKey, hashtable table returns boolean
    return SaveWidgetHandle(table, missionKey, key, whichWidget)
endfunction
function SaveDestructableHandleBJ takes destructable whichDestructable, integer key, integer missionKey, hashtable table returns boolean
    return SaveDestructableHandle(table, missionKey, key, whichDestructable)
endfunction
function SaveItemHandleBJ takes item whichItem, integer key, integer missionKey, hashtable table returns boolean
    return SaveItemHandle(table, missionKey, key, whichItem)
endfunction
function SaveUnitHandleBJ takes unit whichUnit, integer key, integer missionKey, hashtable table returns boolean
    return SaveUnitHandle(table, missionKey, key, whichUnit)
endfunction
function SaveAbilityHandleBJ takes ability whichAbility, integer key, integer missionKey, hashtable table returns boolean
    return SaveAbilityHandle(table, missionKey, key, whichAbility)
endfunction
function SaveTimerHandleBJ takes timer whichTimer, integer key, integer missionKey, hashtable table returns boolean
    return SaveTimerHandle(table, missionKey, key, whichTimer)
endfunction
function SaveTriggerHandleBJ takes trigger whichTrigger, integer key, integer missionKey, hashtable table returns boolean
    return SaveTriggerHandle(table, missionKey, key, whichTrigger)
endfunction
function SaveTriggerConditionHandleBJ takes triggercondition whichTriggercondition, integer key, integer missionKey, hashtable table returns boolean
    return SaveTriggerConditionHandle(table, missionKey, key, whichTriggercondition)
endfunction
function SaveTriggerActionHandleBJ takes triggeraction whichTriggeraction, integer key, integer missionKey, hashtable table returns boolean
    return SaveTriggerActionHandle(table, missionKey, key, whichTriggeraction)
endfunction
function SaveTriggerEventHandleBJ takes event whichEvent, integer key, integer missionKey, hashtable table returns boolean
    return SaveTriggerEventHandle(table, missionKey, key, whichEvent)
endfunction
function SaveForceHandleBJ takes force whichForce, integer key, integer missionKey, hashtable table returns boolean
    return SaveForceHandle(table, missionKey, key, whichForce)
endfunction
function SaveGroupHandleBJ takes group whichGroup, integer key, integer missionKey, hashtable table returns boolean
    return SaveGroupHandle(table, missionKey, key, whichGroup)
endfunction
function SaveLocationHandleBJ takes location whichLocation, integer key, integer missionKey, hashtable table returns boolean
    return SaveLocationHandle(table, missionKey, key, whichLocation)
endfunction
function SaveRectHandleBJ takes rect whichRect, integer key, integer missionKey, hashtable table returns boolean
    return SaveRectHandle(table, missionKey, key, whichRect)
endfunction
function SaveBooleanExprHandleBJ takes boolexpr whichBoolexpr, integer key, integer missionKey, hashtable table returns boolean
    return SaveBooleanExprHandle(table, missionKey, key, whichBoolexpr)
endfunction
function SaveSoundHandleBJ takes sound whichSound, integer key, integer missionKey, hashtable table returns boolean
    return SaveSoundHandle(table, missionKey, key, whichSound)
endfunction
function SaveEffectHandleBJ takes effect whichEffect, integer key, integer missionKey, hashtable table returns boolean
    return SaveEffectHandle(table, missionKey, key, whichEffect)
endfunction
function SaveUnitPoolHandleBJ takes unitpool whichUnitpool, integer key, integer missionKey, hashtable table returns boolean
    return SaveUnitPoolHandle(table, missionKey, key, whichUnitpool)
endfunction
function SaveItemPoolHandleBJ takes itempool whichItempool, integer key, integer missionKey, hashtable table returns boolean
    return SaveItemPoolHandle(table, missionKey, key, whichItempool)
endfunction
function SaveQuestHandleBJ takes quest whichQuest, integer key, integer missionKey, hashtable table returns boolean
    return SaveQuestHandle(table, missionKey, key, whichQuest)
endfunction
function SaveQuestItemHandleBJ takes questitem whichQuestitem, integer key, integer missionKey, hashtable table returns boolean
    return SaveQuestItemHandle(table, missionKey, key, whichQuestitem)
endfunction
function SaveDefeatConditionHandleBJ takes defeatcondition whichDefeatcondition, integer key, integer missionKey, hashtable table returns boolean
    return SaveDefeatConditionHandle(table, missionKey, key, whichDefeatcondition)
endfunction
function SaveTimerDialogHandleBJ takes timerdialog whichTimerdialog, integer key, integer missionKey, hashtable table returns boolean
    return SaveTimerDialogHandle(table, missionKey, key, whichTimerdialog)
endfunction
function SaveLeaderboardHandleBJ takes leaderboard whichLeaderboard, integer key, integer missionKey, hashtable table returns boolean
    return SaveLeaderboardHandle(table, missionKey, key, whichLeaderboard)
endfunction
function SaveMultiboardHandleBJ takes multiboard whichMultiboard, integer key, integer missionKey, hashtable table returns boolean
    return SaveMultiboardHandle(table, missionKey, key, whichMultiboard)
endfunction
function SaveMultiboardItemHandleBJ takes multiboarditem whichMultiboarditem, integer key, integer missionKey, hashtable table returns boolean
    return SaveMultiboardItemHandle(table, missionKey, key, whichMultiboarditem)
endfunction
function SaveTrackableHandleBJ takes trackable whichTrackable, integer key, integer missionKey, hashtable table returns boolean
    return SaveTrackableHandle(table, missionKey, key, whichTrackable)
endfunction
function SaveDialogHandleBJ takes dialog whichDialog, integer key, integer missionKey, hashtable table returns boolean
    return SaveDialogHandle(table, missionKey, key, whichDialog)
endfunction
function SaveButtonHandleBJ takes button whichButton, integer key, integer missionKey, hashtable table returns boolean
    return SaveButtonHandle(table, missionKey, key, whichButton)
endfunction
function SaveTextTagHandleBJ takes texttag whichTexttag, integer key, integer missionKey, hashtable table returns boolean
    return SaveTextTagHandle(table, missionKey, key, whichTexttag)
endfunction
function SaveLightningHandleBJ takes lightning whichLightning, integer key, integer missionKey, hashtable table returns boolean
    return SaveLightningHandle(table, missionKey, key, whichLightning)
endfunction
function SaveImageHandleBJ takes image whichImage, integer key, integer missionKey, hashtable table returns boolean
    return SaveImageHandle(table, missionKey, key, whichImage)
endfunction
function SaveUbersplatHandleBJ takes ubersplat whichUbersplat, integer key, integer missionKey, hashtable table returns boolean
    return SaveUbersplatHandle(table, missionKey, key, whichUbersplat)
endfunction
function SaveRegionHandleBJ takes region whichRegion, integer key, integer missionKey, hashtable table returns boolean
    return SaveRegionHandle(table, missionKey, key, whichRegion)
endfunction
function SaveFogStateHandleBJ takes fogstate whichFogState, integer key, integer missionKey, hashtable table returns boolean
    return SaveFogStateHandle(table, missionKey, key, whichFogState)
endfunction
function SaveFogModifierHandleBJ takes fogmodifier whichFogModifier, integer key, integer missionKey, hashtable table returns boolean
    return SaveFogModifierHandle(table, missionKey, key, whichFogModifier)
endfunction
function LoadRealBJ takes integer key, integer missionKey, hashtable table returns real
    //call SyncStoredReal(table, missionKey, key)
    return LoadReal(table, missionKey, key)
endfunction
function LoadIntegerBJ takes integer key, integer missionKey, hashtable table returns integer
    //call SyncStoredInteger(table, missionKey, key)
    return LoadInteger(table, missionKey, key)
endfunction
function LoadBooleanBJ takes integer key, integer missionKey, hashtable table returns boolean
    //call SyncStoredBoolean(table, missionKey, key)
    return LoadBoolean(table, missionKey, key)
endfunction
function LoadStringBJ takes integer key, integer missionKey, hashtable table returns string
    local string s
    //call SyncStoredString(table, missionKey, key)
    set s = LoadStr(table, missionKey, key)
    if (s == null) then
        return ""
    else
        return s
    endif
endfunction
function LoadPlayerHandleBJ takes integer key, integer missionKey, hashtable table returns player
    return LoadPlayerHandle(table, missionKey, key)
endfunction
function LoadWidgetHandleBJ takes integer key, integer missionKey, hashtable table returns widget
    return LoadWidgetHandle(table, missionKey, key)
endfunction
function LoadDestructableHandleBJ takes integer key, integer missionKey, hashtable table returns destructable
    return LoadDestructableHandle(table, missionKey, key)
endfunction
function LoadItemHandleBJ takes integer key, integer missionKey, hashtable table returns item
    return LoadItemHandle(table, missionKey, key)
endfunction
function LoadUnitHandleBJ takes integer key, integer missionKey, hashtable table returns unit
    return LoadUnitHandle(table, missionKey, key)
endfunction
function LoadAbilityHandleBJ takes integer key, integer missionKey, hashtable table returns ability
    return LoadAbilityHandle(table, missionKey, key)
endfunction
function LoadTimerHandleBJ takes integer key, integer missionKey, hashtable table returns timer
    return LoadTimerHandle(table, missionKey, key)
endfunction
function LoadTriggerHandleBJ takes integer key, integer missionKey, hashtable table returns trigger
    return LoadTriggerHandle(table, missionKey, key)
endfunction
function LoadTriggerConditionHandleBJ takes integer key, integer missionKey, hashtable table returns triggercondition
    return LoadTriggerConditionHandle(table, missionKey, key)
endfunction
function LoadTriggerActionHandleBJ takes integer key, integer missionKey, hashtable table returns triggeraction
    return LoadTriggerActionHandle(table, missionKey, key)
endfunction
function LoadTriggerEventHandleBJ takes integer key, integer missionKey, hashtable table returns event
    return LoadTriggerEventHandle(table, missionKey, key)
endfunction
function LoadForceHandleBJ takes integer key, integer missionKey, hashtable table returns force
    return LoadForceHandle(table, missionKey, key)
endfunction
function LoadGroupHandleBJ takes integer key, integer missionKey, hashtable table returns group
    return LoadGroupHandle(table, missionKey, key)
endfunction
function LoadLocationHandleBJ takes integer key, integer missionKey, hashtable table returns location
    return LoadLocationHandle(table, missionKey, key)
endfunction
function LoadRectHandleBJ takes integer key, integer missionKey, hashtable table returns rect
    return LoadRectHandle(table, missionKey, key)
endfunction
function LoadBooleanExprHandleBJ takes integer key, integer missionKey, hashtable table returns boolexpr
    return LoadBooleanExprHandle(table, missionKey, key)
endfunction
function LoadSoundHandleBJ takes integer key, integer missionKey, hashtable table returns sound
    return LoadSoundHandle(table, missionKey, key)
endfunction
function LoadEffectHandleBJ takes integer key, integer missionKey, hashtable table returns effect
    return LoadEffectHandle(table, missionKey, key)
endfunction
function LoadUnitPoolHandleBJ takes integer key, integer missionKey, hashtable table returns unitpool
    return LoadUnitPoolHandle(table, missionKey, key)
endfunction
function LoadItemPoolHandleBJ takes integer key, integer missionKey, hashtable table returns itempool
    return LoadItemPoolHandle(table, missionKey, key)
endfunction
function LoadQuestHandleBJ takes integer key, integer missionKey, hashtable table returns quest
    return LoadQuestHandle(table, missionKey, key)
endfunction
function LoadQuestItemHandleBJ takes integer key, integer missionKey, hashtable table returns questitem
    return LoadQuestItemHandle(table, missionKey, key)
endfunction
function LoadDefeatConditionHandleBJ takes integer key, integer missionKey, hashtable table returns defeatcondition
    return LoadDefeatConditionHandle(table, missionKey, key)
endfunction
function LoadTimerDialogHandleBJ takes integer key, integer missionKey, hashtable table returns timerdialog
    return LoadTimerDialogHandle(table, missionKey, key)
endfunction
function LoadLeaderboardHandleBJ takes integer key, integer missionKey, hashtable table returns leaderboard
    return LoadLeaderboardHandle(table, missionKey, key)
endfunction
function LoadMultiboardHandleBJ takes integer key, integer missionKey, hashtable table returns multiboard
    return LoadMultiboardHandle(table, missionKey, key)
endfunction
function LoadMultiboardItemHandleBJ takes integer key, integer missionKey, hashtable table returns multiboarditem
    return LoadMultiboardItemHandle(table, missionKey, key)
endfunction
function LoadTrackableHandleBJ takes integer key, integer missionKey, hashtable table returns trackable
    return LoadTrackableHandle(table, missionKey, key)
endfunction
function LoadDialogHandleBJ takes integer key, integer missionKey, hashtable table returns dialog
    return LoadDialogHandle(table, missionKey, key)
endfunction
function LoadButtonHandleBJ takes integer key, integer missionKey, hashtable table returns button
    return LoadButtonHandle(table, missionKey, key)
endfunction
function LoadTextTagHandleBJ takes integer key, integer missionKey, hashtable table returns texttag
    return LoadTextTagHandle(table, missionKey, key)
endfunction
function LoadLightningHandleBJ takes integer key, integer missionKey, hashtable table returns lightning
    return LoadLightningHandle(table, missionKey, key)
endfunction
function LoadImageHandleBJ takes integer key, integer missionKey, hashtable table returns image
    return LoadImageHandle(table, missionKey, key)
endfunction
function LoadUbersplatHandleBJ takes integer key, integer missionKey, hashtable table returns ubersplat
    return LoadUbersplatHandle(table, missionKey, key)
endfunction
function LoadRegionHandleBJ takes integer key, integer missionKey, hashtable table returns region
    return LoadRegionHandle(table, missionKey, key)
endfunction
function LoadFogStateHandleBJ takes integer key, integer missionKey, hashtable table returns fogstate
    return LoadFogStateHandle(table, missionKey, key)
endfunction
function LoadFogModifierHandleBJ takes integer key, integer missionKey, hashtable table returns fogmodifier
    return LoadFogModifierHandle(table, missionKey, key)
endfunction
function FlushParentHashtableBJ takes hashtable table returns nothing
    call FlushParentHashtable(table)
endfunction
function FlushChildHashtableBJ takes integer missionKey, hashtable table returns nothing
    call FlushChildHashtable(table, missionKey)
endfunction
function HaveSavedValue takes integer key, integer valueType, integer missionKey, hashtable table returns boolean
    if (valueType == bj_HASHTABLE_BOOLEAN) then
        return HaveSavedBoolean(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_INTEGER) then
        return HaveSavedInteger(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_REAL) then
        return HaveSavedReal(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedString(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedHandle(table, missionKey, key)
    else
        // Unrecognized value type - ignore the request.
        return false
    endif
endfunction
function GetDyingDestructable takes nothing returns destructable
    return GetTriggerDestructable()
endfunction
[/jass]
回复

使用道具 举报

 楼主| 发表于 2009-11-3 18:31:35 | 显示全部楼层
你用的不是jass而是quote
回复

使用道具 举报

发表于 2009-11-3 19:20:04 | 显示全部楼层
小血给编辑下吧
回复

使用道具 举报

发表于 2009-12-15 13:46:20 | 显示全部楼层
globals

hashtable HT = null

endglobals



function Init takes nothing returns nothing

call FlushParentHashtable( HT )

set HT = InitHashtable()

endfunction



function Damage_Act takes nothing returns boolean

local integer parentKey = GetHandleId( GetTriggeringTrigger() )

local unit source = LoadUnitHandle( HT, parentKey, 1 )

local unit target = LoadUnitHandle( HT, parentKey, 2 )

call FlushChildHashtable( HT, parentKey )

call TriggerRemoveCondition( GetTriggeringTrigger(), LoadTriggerConditionHandle( HT, parentKey, 3 ) )

call DestroyTrigger( GetTriggeringTrigger() )

set source = null

set target = null

return false

endfunction



function Damage takes unit source, unit target returns nothing

local trigger t = CreateTrigger()

local integer parentKey = GetHandleId( t )

local boolexpr cond = Condition( function Damage_Act )

call SaveUnitHandle( HT, parentKey, 1, source )

call SaveUnitHandle( HT, parentKey, 2, target )

call TriggerRegisterUnitEvent( t, target, EVENT_UNIT_DAMAGED )

call SaveTriggerConditionHandle( HT, parentKey, 3, TriggerAddCondition( t, cond ) )

set t = null

set cond = null

endfunction


我自首,我挖坟了。

话说对这段代码有点疑问,貌似没有实现攻击xx次之类的功能,而且return false会不会导致根本不运行呀?
回复

使用道具 举报

发表于 2009-12-15 13:59:20 | 显示全部楼层
引用第48楼liangilu于2009-12-15 13:46发表的  :
globals

hashtable HT = null

endglobals
.......
似乎是小血忘记写伤害部分了……

不过
return false是没有问题的
这个是用了在条件中执行函数的方法
回复

使用道具 举报

发表于 2009-12-15 15:02:12 | 显示全部楼层
引用第49楼疯人¢衰人于2009-12-15 13:59发表的  :

似乎是小血忘记写伤害部分了……

不过
return false是没有问题的
.......
我的错。我以为如果条件只return false之前的语句就不会被执行,实验了一下发现是可以的。
看来大大把计数啊,伤害啊,摧毁触发啊都留给我们了。哦了。
回复

使用道具 举报

发表于 2010-5-22 16:46:54 | 显示全部楼层
good!!!!!
回复

使用道具 举报

发表于 2010-6-18 16:24:07 | 显示全部楼层
回复

使用道具 举报

发表于 2011-2-10 22:16:56 | 显示全部楼层
话说  会了RB  学这个真是快 看了LZ的前几句 就用HT  做了一个 3C的 精灵祝福  虽然花了不少时间啊

我有个疑问   在函数里用等待 有问题吗
还有  是不是命令单位移动的同时 命令单位施放技能 只能做1个呢
回复

使用道具 举报

发表于 2011-2-24 17:36:34 | 显示全部楼层
globals
hashtable HT = null
endglobals

function Init takes nothing returns nothing
call FlushParentHashtable( HT )
set HT = InitHashtable()
endfunction

function TauntUnits_Act takes nothing returns nothing
local integer parentKey = GetHandleId( GetExpiredTimer() )
local unit target = LoadUnitHandle( HT, parentKey, 1 )
local group units = LoadGroupHandle( HT, parentKey, 2 )
local real time = LoadReal( HT, parentKey, 3 )
local real elapsed = LoadReal( HT, parentKey, 4 )
if elapsed < time then
call ForGroup( units, function TauntUnits_Attack )
call SaveReal( HT, parentKey, 4, elapsed + 0.1 )
else
call DestroyGroup( units )
call FlushChildHashtable( HT, parentKey )
call DestroyTimer( GetExpiredTimer() )
endif
set target = null
set units = null
endfunction

function TauntUnits takes unit target, group units, real time returns nothing
local timer t = CreateTimer()
local integer parentKey = GetHandleId( t )
call SaveUnitHandle( HT, parentKey, 1, target )
call SaveGroupHandle( HT, parentKey, 2, units )
call SaveReal( HT, parentKey, 3, time )
call TimerStart( t, 0.1, true, function TauntUnits_Act )
set t = null
endfunction

(为了方便,把麻烦的命令单位组攻击的函数省略不写了)

话说。。。怎么绑? ForGroup()
怎么拿哈希表传函。。。不会饿、、、就想看这个
回复

使用道具 举报

发表于 2011-2-26 21:23:24 | 显示全部楼层
引用第24楼疯人¢衰人于2009-10-31 10:27发表的 :
GA上用J的基本上无人用bj吧


额  悲剧的我就用的   虽然也知道个别BJ的效率不是很高

但是 对于某些简单的转化 既然BJ已经封装了 何必不用呢   而且也不是每个BJ都不好的啦  看一下代码再决定就行了
回复

使用道具 举报

发表于 2011-10-18 23:02:08 | 显示全部楼层
好多,看的蛋疼
回复

使用道具 举报

发表于 2011-12-23 09:45:46 | 显示全部楼层
说的不错!








回复

使用道具 举报

发表于 2012-2-9 05:32:22 | 显示全部楼层
怎麼可以讓精華文章 沉淪...

頂~~
回复

使用道具 举报

发表于 2016-2-21 18:02:18 | 显示全部楼层
阉割版的演示,蛋疼!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:19 , Processed in 0.268327 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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