Board logo

标题: [提问] 求助一个弄了好久没弄出来的效果 [打印本页]

作者: orochi0531    时间: 2016-4-28 09:58     标题: 求助一个弄了好久没弄出来的效果

复制内容到剪贴板
代码:
NL.RegPartyEvent(nil,"MyPartyEvent");
--Delegate.RegInit("Mypart_Init");

function MyPartyEvent(CharIndex, TargetCharIndex, Type)
        Char.SetWindowTalkedEvent(nil, "MypartM_WindowTalked", CharIndex);
        if(Type==0)then
                local msg = "\\n\\n"..Char.GetData(CharIndex,%对象_名字%).." 申请加入您的队伍。\\n\\n是否同意其入队申请呢?\\n\\n同意入队请选择『是』,拒绝入队请选择『否』。\\n"
                local addpartymsg = NLG.ShowWindowTalked(TargetCharIndex,CharIndex,%窗口_信息框%,%按钮_是否%,1,msg);
                --MypartM_sg(Mypart_index, TargetCharIndex);
                --MypartM_WindowTalked(CharIndex, TargetCharIndex,1,%按钮_否%,msg);
                return 0;
        end
        return 1;
end


-- function MypartM_sg(_NpcIndex,_PlayerIndex)


                -- local msg = "\\n\\n"..Char.GetData(_PlayerIndex,%对象_名字%).." 申请加入您的队伍。\\n\\n是否同意其入队申请呢?\\n\\n同意入队请选择『是』,拒绝入队请选择『否』。\\n"
                -- local addpartymsg = NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_是否%,1,msg);
                -- return;
-- end


function MypartM_WindowTalked(_me,_tome,_seqno,_select,_data)
        --NLG.SystemMessage(_me,_select);
        if(tonumber(_seqno)==1 and tonumber(_select)==%按钮_否% and _data~="")then
                NLG.SystemMessage(_me,"队长拒绝了您的入队申请!");
                return;
        end
        --Char.JoinParty(_me,_tome);

        return;
end

-- function initmypart_Init(index)
        -- return 1;
-- end

-- function Mypart_create()
        -- if (Mypart_index == nil) then
                -- Mypart_index = NL.CreateNpc(nil, "initmypart_Init");
                -- Char.SetData(Mypart_index,%对象_形象%,10414);
                -- Char.SetData(Mypart_index,%对象_原形%,10414);
                -- Char.SetData(Mypart_index,%对象_X%,18);
                -- Char.SetData(Mypart_index,%对象_Y%,1);
                -- Char.SetData(Mypart_index,%对象_地图%,777);
                -- Char.SetData(Mypart_index,%对象_方向%,4);
                -- Char.SetData(Mypart_index,%对象_名字%,"组队离队NPC");
                -- NLG.UpChar(Mypart_index);
                ----Char.SetTalkedEvent(nil, "MypartM_sg", Mypart_index);
                -- Char.SetWindowTalkedEvent(nil, "MypartM_WindowTalked", Mypart_index);
        -- end
-- end
-- function Mypart_Init()
        -- Mypart_create();
       
-- end
就是点组队后,队长会弹出是否同意组队的对话框,但是,我弄了好久没解决如何触发队长的选择,用npc的方式触发失败,至今没解决,希望知道的帮忙解决下啊。截图在我另一个帖子有发过的。
作者: jeff10363    时间: 2016-4-28 10:30     标题: 回复 阁楼 的帖子

剛想想 因該是寫的順序 跟對象錯亂  我讀到後面已經分不出哪個參數是哪個參數bbs.mocwww.com4 u: y+ L5 q$ J8 o: c
本來想說可以用 全域變數驗證 可是我在上班 沒辦法測試XDbbs.mocwww.com) m4 V3 u6 @6 S: {# h/ S$ F

3 q% q  R1 Z' _' L8 D( ?妖城在线论坛你看這樣 可不可以
) ]- \- B' ]- c魔力私服,最新魔力宝贝私服技术交流
3 `$ e3 n: }5 n6 n. `" B妖城在线论坛大概看一下,不能實際測試=A=
复制内容到剪贴板
代码:
---產生組隊處發    自己  對方  自己鍵值



function MyPartyEvent(CharIndex, TargetCharIndex, Type)

--如果自己傳達 +入組隊
        if(Type==0)then


--讓對方執行NPC窗口
----------------NPC窗口 (NPC本體,觸發者)
                MypartM_sg(Mypart_index,TargetCharIndex);
                return 0;
        end
        return 1;
end



--NPC窗口   抓出NPC本身.觸發者  這邊觸發者 變成 被要求組隊的那個人
function MypartM_sg(_NpcIndex,_PlayerIndex)

                local msg = "\\n\\n"..Char.GetData(CharIndex,%对象_名字%).." 申请加入您的队伍。\\n\\n是否同意其入队申请呢?\\n\\n同意入队请选择『是』,拒绝入队请选择『否』。\\n"


                NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_是否%,1,msg);

end




--NPC AI行為模式  (_NpcIndex,_PlayerIndex,_SeqNo,_Select,_data)



--這裡怪怪的~~~ _me 因該為NPC本身吧,   CharIndex為最初觸發者 要求組隊的人 不知道可不可傳達到這裡

function MypartM_WindowTalked(_me,_tome,_seqno,_select,_data)

--窗口
        if(tonumber(_seqno)==1 and tonumber(_select)==%按钮_否% and _data~="")then
                --NLG.SystemMessage(_me,"队长拒绝了您的入队申请!"); <--對象好像不正確

                NLG.SystemMessage(CharIndex,"队长拒绝了您的入队申请!");--CharIndex
                return;
        end


        Char.JoinParty(CharIndex,_tome);

        return;
end
[ 本帖最后由 jeff10363 于 2016-4-28 11:00 编辑 ]
作者: 易凡    时间: 2016-4-28 13:23

这种需要加一个临时表来存储bbs.mocwww.com0 z- |! [6 z) X* N9 P; x0 W

  G9 e' K5 g3 _- b! k' `bbs.mocwww.com否则Char.JoinParty(CharIndex,_tome);函数会反复触发组队事件。
作者: 易凡    时间: 2016-4-28 13:43

复制内容到剪贴板
代码:
--组队事件
--_player:主动组队的玩家
--_toplayer:被组队的玩家
--_type:0:加入组队,1:离开组队

tbl_party_check = {};

function RPartyEvent(_player,_toplayer,_type)
        if (tbl_party_check[Char.GetData(_player,%对象_账号%)] ~= nil) then
                if (tbl_party_check[Char.GetData(_player,%对象_账号%)] == _toplayer) then
                        tbl_party_check[Char.GetData(_player,%对象_账号%)] = nil;
                        return 1;
                end
        end
        if (_type==0) then
                local msg = "\\n\\n"..Char.GetData(_player,%对象_名字%).." 申请加入您的队伍。\\n\\n是否同意其入队申请呢?\\n\\n同意入队请选择『是』,拒绝入队请选择『否』。\\n";
                tbl_party_check[Char.GetData(_toplayer,%对象_账号%)] = _player;
                NLG.ShowWindowTalked(_toplayer,tbl_npc["id69"],%窗口_信息框%,%按钮_是否%,1,msg);
                return 0;
        end
        return 1;
end
复制内容到剪贴板
代码:
--测试——TestNpc_id69——Lua脚本
function TestNpc_id69_Talked(_npc,_player)
        return;
end

function TestNpc_id69_WTalked(_npc,_player,_seqno,_select,_data)
        local _checkplayer = tbl_party_check[Char.GetData(_player,%对象_账号%)];
        if (tonumber(_seqno)==1) then
                if (tonumber(_select) == %按钮_是%) then
                        tbl_party_check[Char.GetData(_checkplayer,%对象_账号%)] = _player;
                        Char.JoinParty(_checkplayer,_player);
                else
                        NLG.SystemMessage(_checkplayer,"队长拒绝了你的组队申请");
                end
                return;
        end
        return;
end

作者: 易凡    时间: 2016-4-28 13:44

这样就可以了。新建立一个NPC,用来触发弹窗事件。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート* Y# o( n5 _4 v: J8 P3 R
$ S. D$ P' L6 F4 }1 b9 V
然后加一个临时表,用来缓存对象实例
作者: orochi0531    时间: 2016-4-29 11:12

测试了下,组队部分弹出对话框后,队长这边没点同意的情况下,这个队长点别人组队的话,会直接组进去
作者: jeff10363    时间: 2016-4-29 13:16

我昨天在完善踢人的那個LUA="""=  跟你一樣的情況—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; d/ n. q5 T8 K: q
妖城在线论坛! q0 E& b& {  l. W$ U
結果發現 你每多一個確認框  妖城在线论坛2 G7 M1 a/ s3 E2 ?
所以你就要多一個判斷 是不是 跟一開始的人相同魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 A7 \: B6 s" ^7 u7 b
bbs.mocwww.com/ I$ d, E6 M* s$ |5 E
不然在確認界面 "還沒按下 按鈕前" 會有一堆變數 一堆可能性 會產生BUG. W1 ^6 L% K4 U5 t' b6 [" n9 u

0 Y4 m4 l6 Z' h2 ~4 A1 G妖城在线论坛越多視窗 越多判斷-..-
作者: ﹎▓ヾ僤莼べ    时间: 2016-4-29 22:39

随便写的,没怎么测试。。
; i% T: ]- Z6 O1 f" D4 c妖城在线论坛
% D/ I! B; Z1 L+ T3 e' i' M8 X3 N魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表试试看吧,架构还是你之前的,我只是做出来效果而已。魔力私服,最新魔力宝贝私服技术交流/ ]$ }0 l6 c9 [* [9 W
bbs.mocwww.com* y- ?1 h- e7 Y. G2 j0 L. X! F! z' Z; o7 s
另外,我不建议在人物身上挂任何的callback..(如loop,会跟宠邮的loop产生冲突)
复制内容到剪贴板
代码:
NL.RegPartyEvent(nil,"OnPlayerJoinParty");
Delegate.RegInit("PartyManager_Init");

function OnPlayerJoinParty( _index, _target, _type)
    if _type == 0 then
                local ConfirmMessage = "\\n\\n"..Char.GetData(_index, 2000).." 申请加入您的队伍。\\n\\n是否同意其入队申请呢?\\n\\n同意入队请选择『是』,拒绝入队请选择『否』。\\n"
                if NLG.ShowWindowTalked( _target, m_PartyManager, 0, 12, _index, ConfirmMessage) < 0 then
                        return 1;        --异常处理机制(如果没法给队长发送消息..)
                end
                return 0;
    end
    return 1;
end

function OnPartyManagerWindowTalked( _me, _tome, _seqno, _select, _data)
        if not _seqno then        --索引异常(一般不会出现)
                return;
        end

        local PartyMode = Char.GetData( _tome, 386); --%对象_组队模式%
        if PartyMode > 1 then        --组队状态异常( 0 is none, 1 is leader)
                return;
        end
               
        if( _select == 8) then
                NLG.SystemMessage( _seqno,"队长拒绝了您的入队申请!");
        else
                Char.JoinParty( _seqno, _tome);
        end
       
        return;
end

function PartyManager_Init()
    if (m_PartyManager == nil) then
                m_PartyManager = NormalCreate( 0, 99, 33, 777, 4, "PartManager");
                if( VaildChar(m_PartyManager) == true) then
                        Char.SetWindowTalkedEvent(nil, "OnPartyManagerWindowTalked", m_PartyManager);
                end
        end
end

作者: ﹎▓ヾ僤莼べ    时间: 2016-4-29 22:41

数据要一层一层的传递,如通过 _seqno 来判断。。
7 r3 g$ q" e; ?/ a( U# Q+ J& \* D妖城在线论坛
  @( A! M0 C; [8 ]% h# N—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート很多种方式的,完全看你怎么来做。妖城在线论坛; P8 _, q; k" U% p0 l

9 S, [- Z6 s" u5 x/ `3 |1 x  V魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表框架多并不代表一定会出现BUG,还是看实现思路。
2 O4 p3 ?% l, V( ?- r+ v" f
& }% j/ g. E/ ^2 H" ]) l
引用:
原帖由 jeff10363 于 2016-4-29 13:16 发表 魔力私服,最新魔力宝贝私服技术交流6 s# d" V6 R4 \
我昨天在完善踢人的那個LUA="""=  跟你一樣的情況
, e2 _5 ^6 F, Z$ C# U' q—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート魔力私服,最新魔力宝贝私服技术交流& ]- b8 c  T3 `7 k+ d6 C
結果發現 你每多一個確認框  妖城在线论坛8 U3 O( K: j% C4 M+ s+ H/ t2 k
所以你就要多一個判斷 是不是 跟一開始的人相同魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" L9 r- `' v2 h7 T
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; m9 X* [: D; S# ^2 |( v0 f- v! [' l
不然在確認界面 "還沒按下 按鈕前" 會有一堆變數 一堆可能性 會產生BUG
. x3 g3 j- q; c2 R1 K—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
4 f' G0 h5 ^* F. `+ }6 S- R  C9 obbs.mocwww.com越多 ...

作者: ﹎▓ヾ僤莼べ    时间: 2016-4-29 22:43

利用 WindowBuffer, 在tagChar_player_work里
' H, J0 G' P8 {( e$ v( F) u魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表* e0 b  O0 R8 R" o3 N! h7 z8 ?  H1 r
魔力默认也是采用的WindowBuffer来缓存临时数据。
0 D+ `& F6 G! n" j6 y魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表1 {1 y0 V3 s- }6 q$ v" _1 l
引用:
原帖由 易凡 于 2016-4-28 13:44 发表
* q9 ]& ^; X& f# a0 b6 c—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート这样就可以了。新建立一个NPC,用来触发弹窗事件。
- l* K) F: l4 B7 G! K# B, k3 \魔力私服,最新魔力宝贝私服技术交流魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# O/ D5 l, e; m/ R: h9 H8 i7 S
然后加一个临时表,用来缓存对象实例

作者: nijiechao    时间: 2016-4-29 22:55

引用:
原帖由 ﹎▓ヾ僤莼べ 于 2016-4-29 22:43 发表 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 N7 F0 \; u2 [& j' T# t& y) K+ K
利用 WindowBuffer, 在tagChar_player_work里妖城在线论坛! ^& Q. i  h. J. M; q

# p' Q7 j3 _9 X( d# u  z5 Z* c妖城在线论坛魔力默认也是采用的WindowBuffer来缓存临时数据。
4 {3 ?6 U: N9 L6 P( H魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表妖城在线论坛/ o; J& [* `' J; U
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' P: @/ K6 v4 M$ g. o
魔力默认也是采用的WindowBuffer来缓存临时数据?你真逗,缓冲寄存器就缓冲寄存器嘛
$ \8 e. N* q6 d, ]5 u; E4 S5 o妖城在线论坛
1 i5 u/ v8 B) F0 g$ s+ U—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート[ 本帖最后由 HookSend 于 2016-4-30 11:51 编辑 ]
作者: 易凡    时间: 2016-4-29 23:44

魔力本身确实用WindowBuffer缓存的
' g8 M( K) {2 r. N& d魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表- C  r, Z+ E" j6 H: ^. F
我台服引擎那边,lua的所有选择宠物和道具的位置缓存也都用这个。魔力私服,最新魔力宝贝私服技术交流  ?  f3 `$ d  @- G8 Q

+ p# H. e" W  V, [: Qbbs.mocwww.com星夜说的并无错。。。。。。
( V8 j& M8 x' j; u7 ]1 n6 p2 z
$ b. ~; Y4 k9 R, Z; r# ?魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表好好沟通交流。。。。不要太暴躁。。。




欢迎光临 妖城在线论坛 (http://bbs.mocwww.com/) Powered by Discuz! 6.0.0