找回密码
 点一下
楼主: 希瓦

一个简单强大的ORPGSL系统

[复制链接]
发表于 2011-6-26 19:34:49 | 显示全部楼层
多谢希瓦大人,偶地图用了老狼的那个显示伤害系统,代码如下,把你的放在后边会有隐患的不


// === 公用函数,如果你的地图中已有该函数则可以删除

function h2i takes handle h returns integer
return h
return 0
endfunction

function i2tg takes integer i returns trigger
return i
return null
endfunction

function i2tc takes integer i returns triggercondition
return i
return null
endfunction

// === 伤害显示主函数

function ShowDamage_Func takes nothing returns boolean
    local texttag tt
    if IsUnitType(GetEventDamageSource(),UNIT_TYPE_HERO) and GetEventDamage() > 0 then
        set tt = CreateTextTag()
        if udg_DamShowOn[GetPlayerId(GetLocalPlayer())] then
            call SetTextTagText(tt, I2S(R2I(GetEventDamage())), 0.03) //字体大小
            call SetTextTagPos(tt, GetUnitX(GetTriggerUnit()),GetUnitY(GetTriggerUnit()),50) //显示位置
            call SetTextTagColor(tt, 255, 0, 0, 0) //字体颜色
            call SetTextTagVelocity(tt, 0, TextTagSpeed2Velocity(200)) //移动速度(x,y)
            call SetTextTagFadepoint(tt, 0.1) //消逝点(0.1秒开始消逝效果)
        endif
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 3) //漂浮文字生命期
    endif
    set tt = null
    return false
endfunction

function ShowDamage takes unit u, boolean showOn returns nothing
    local trigger t
    local triggercondition c
    local integer i
    if showOn then
        if not HaveStoredInteger(udg_GC,I2S(h2i(u)),"DamShowTrigger") then
            set t = CreateTrigger()
            set c = TriggerAddCondition(t, Condition(function ShowDamage_Func))
            call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_DAMAGED)
            call StoreInteger(udg_GC,I2S(h2i(u)),"DamShowTrigger",h2i(t))
            call StoreInteger(udg_GC,I2S(h2i(t)),"TriggerCondition",h2i(c))
        endif
        if udg_DamShow_alwaysOn then
            if HaveStoredInteger(udg_GC,I2S(h2i(u)),"DamShowNum") then
                set i = GetStoredInteger(udg_GC,I2S(h2i(u)),"DamShowNum")
                call FlushStoredInteger(udg_GC,I2S(h2i(u)),"DamShowNum")
                set udg_DamShow_GroupCount = udg_DamShow_GroupCount-1
                set udg_DamShow_GroupUnit = udg_DamShow_GroupUnit[udg_DamShow_GroupCount]
                call StoreInteger(udg_GC,I2S(h2i(udg_DamShow_GroupUnit)),"DamShowNum",i)
            endif
            set udg_DamShow_alwaysOn = false
        else
            if not HaveStoredInteger(udg_GC,I2S(h2i(u)),"DamShowNum") then
                set udg_DamShow_GroupUnit[udg_DamShow_GroupCount] = u
                call StoreInteger(udg_GC,I2S(h2i(u)),"DamShowNum",udg_DamShow_GroupCount)
                set udg_DamShow_GroupCount = udg_DamShow_GroupCount+1
            endif
        endif
    else
        set t = i2tg(GetStoredInteger(udg_GC,I2S(h2i(u)),"DamShowTrigger"))
        set c = i2tc(GetStoredInteger(udg_GC,I2S(h2i(t)),"TriggerCondition"))
        set i = GetStoredInteger(udg_GC,I2S(h2i(u)),"DamShowNum")
        set udg_DamShow_GroupCount = udg_DamShow_GroupCount-1
        set udg_DamShow_GroupUnit = udg_DamShow_GroupUnit[udg_DamShow_GroupCount]
        call StoreInteger(udg_GC,I2S(h2i(udg_DamShow_GroupUnit)),"DamShowNum",i)
        call FlushStoredInteger(udg_GC,I2S(h2i(u)),"DamShowNum")
        call FlushStoredInteger(udg_GC,I2S(h2i(u)),"DamShowTrigger")
        call FlushStoredMission(udg_GC,I2S(h2i(t)))
        call TriggerRemoveCondition(t,c)
        call DestroyTrigger(t)
    endif
    set t = null
    set c = null
endfunction

function DamShow_TimerFunc takes nothing returns nothing
    local integer i=0
    loop
        exitwhen i >= udg_DamShow_GroupCount
        if GetUnitState(udg_DamShow_GroupUnit, UNIT_STATE_MAX_LIFE) <= 0 then
            call ShowDamage(udg_DamShow_GroupUnit, false)
        endif
        set i=i+1
    endloop
endfunction

function InitDamShow takes nothing returns nothing
    call TimerStart(CreateTimer(),60.0,true,function DamShow_TimerFunc)
endfunction


// === 为方便触发环境下使用而添加的2个函数

function ShowDamageOn takes nothing returns nothing
    call ShowDamage(udg_DamShow_Unit,true)
endfunction

function ShowDamageOff takes nothing returns nothing
    call ShowDamage(udg_DamShow_Unit,false)
endfunction
回复

使用道具 举报

 楼主| 发表于 2011-6-26 20:58:30 | 显示全部楼层
伤害显示和储存系统没有关系吧……一般来说是不会有冲突的……
当然,你不要让伤害系统和储存系统共用一个GC……不然还是可能出错的
回复

使用道具 举报

 楼主| 发表于 2011-6-26 20:59:31 | 显示全部楼层
对了,你的地图加入了我的那个系统之后出现了什么问题没有,可不可以正常使用呢?
回复

使用道具 举报

发表于 2011-6-30 20:23:31 | 显示全部楼层
暂未放置新版发布,单独测试中

往后会深入组织玩家测试

嗯,老狼用的GC和你用的GC都叫GC,看来要换一个名字了
回复

使用道具 举报

发表于 2011-12-30 22:17:38 | 显示全部楼层
太强大了,下来研究下先


另外,特殊字符可以支持的否,譬如——-_!@¥#%&之类
回复

使用道具 举报

 楼主| 发表于 2011-12-30 22:28:43 | 显示全部楼层
支持口牙~
回复

使用道具 举报

发表于 2011-12-30 22:31:39 | 显示全部楼层
那么玩家名字的问题就不是问题了

使用原字符串S/L的版本经过了近一个月的公版游戏,未发现兼容性问题,除了中文和特殊字符串未被注册不可用外……
回复

使用道具 举报

 楼主| 发表于 2011-12-30 22:34:50 | 显示全部楼层
那很好呢~~

需要说明一下,这个中文字版移植比较麻烦。
所以还是等我再写一下移植说明吧,倒是你可以先试用一下~
回复

使用道具 举报

发表于 2012-1-1 16:52:40 | 显示全部楼层
最近地图还在制作,而且没有做多人测试,所以不清楚,但现在我用YDWE已经用了1500个字段来存储数据了。

另据小道消息,YDWE的多人模式下,存档系统读取在数据超过7个之后会造成不同步,所以这个问题不知道有没有解决。

既使没有解决,最多表示地图只能支持单人了,因为做的就是ORPG,就是需要这么多的数据量,只好等以后YDWE的修正版了。
回复

使用道具 举报

 楼主| 发表于 2012-1-1 17:23:11 | 显示全部楼层
最近我也在不断的修改这个系统呢……
不过因为快要考试了,没有太多时间来做这个工作
所以一直都没有把修改版放上来,也没有写出详细的移植说明
因此,很多同学使用了本系统时由于用法不当,出现了一系列的问题
对此我深表歉意,我会在10号之后尽快做出完美版的
在此之前可以先使用这个版本

SL系统500上限版.w3x

12 KB, 下载次数: 11

回复

使用道具 举报

发表于 2012-1-3 22:12:54 | 显示全部楼层
我倒是不很志在文件大小,100K的发挥空间已经足够了,新的SL字符串在新版试试,不知道所谓的移植麻烦是指神马
回复

使用道具 举报

 楼主| 发表于 2012-1-18 20:59:57 | 显示全部楼层
好吧,最新的无上限版……
读取少量数据时(1000以内)基本上没有问题
单人游戏时也基本没有问题

只是多开测试读取5000数据时,玩家“触发停顿”了很多秒钟。
这种“触发停顿”不是卡,但又很像卡,具体表现在:
游戏能完全正常的运行,所有你的单位都会受你的控制,且并没有延迟。
但是触发在发生了事件的情况下却不会运行动作,而是加入队列。
比如:
正常情况下,我输入load后直接就会有Loading...显示出来
但是实际上什么都不会显示……
直到差不多一分钟后,所有触发会一瞬间全部同时运行
以前输入了多少个load就会同时显示多少个Loading...

比较无语……

问题出在魔兽本身的同步速度太慢
以至于要很久很久才能同步完5000个数据……
回复

使用道具 举报

发表于 2012-2-1 21:27:47 | 显示全部楼层
经测试,中文字符传储存在希瓦大人的地图中可以正常使用,但多次反复移植到地图里,都会生成错误的代码,仅显示11或10,不能识别。求鉴定问题所在,因为反复移植过,应该不大可能是漏掉内容没有移植的缘故
回复

使用道具 举报

发表于 2012-2-2 00:02:18 | 显示全部楼层

回 leisel 的帖子

leisel:经测试,中文字符传储存在希瓦大人的地图中可以正常使用,但多次反复移植到地图里,都会生成错误的代码,仅显示11或10,不能识别。求鉴定问题所在,因为反复移植过,应该不大可能是漏掉内容没有移植的缘故 (2012-02-01 21:27)
中文字符?
回复

使用道具 举报

发表于 2012-2-2 00:12:35 | 显示全部楼层
  [s:166]
回复

使用道具 举报

发表于 2012-2-2 00:19:17 | 显示全部楼层
强大啊,我一直想做ORPG地图,苦于SL系统无解
楼主做了演示的话请记得给我也发一份哦
回复

使用道具 举报

发表于 2012-2-2 02:00:53 | 显示全部楼层
回复

使用道具 举报

发表于 2012-2-2 02:05:46 | 显示全部楼层

回 谜之实体 的帖子

谜之实体: 强大啊,我一直想做ORPG地图,苦于SL系统无解
楼主做了演示的话请记得给我也发一份哦 (2012-02-02 00:19)
这座楼里满地附件的说...
回复

使用道具 举报

发表于 2012-2-2 02:54:29 | 显示全部楼层
花眼了,我以为只有一页,结果发现已经有3页的回复了
回复

使用道具 举报

发表于 2012-2-2 13:21:41 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 22:28 , Processed in 0.118909 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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