
标题: [提问] 求助一个弄了好久没弄出来的效果 [打印本页]
作者: 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 标题: 回复 阁楼 的帖子
剛想想 因該是寫的順序 跟對象錯亂 我讀到後面已經分不出哪個參數是哪個參數" J/ R- y' V+ O! @5 W* q& T
本來想說可以用 全域變數驗證 可是我在上班 沒辦法測試XD$ l4 X! [0 a6 d# O
! R6 z+ R) G+ }3 b" Q2 a8 `% w—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート你看這樣 可不可以
% r/ u' x1 s4 E! ^, ^魔力私服,最新魔力宝贝私服技术交流—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート7 [: a6 |& T6 C# R- d
大概看一下,不能實際測試=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
这种需要加一个临时表来存储魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 O; W1 @* i" c8 `3 U
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( H4 e/ F# l$ M$ M0 I7 @$ x, |
否则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,用来触发弹窗事件。
- K7 \; v/ Q$ \2 B$ J魔力私服,最新魔力宝贝私服技术交流: h* I6 d) j1 x/ ?. L1 h5 C
然后加一个临时表,用来缓存对象实例
作者: orochi0531 时间: 2016-4-29 11:12
测试了下,组队部分弹出对话框后,队长这边没点同意的情况下,这个队长点别人组队的话,会直接组进去
作者: jeff10363 时间: 2016-4-29 13:16
我昨天在完善踢人的那個LUA="""= 跟你一樣的情況—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' d! K8 ?3 j# f$ [, F
bbs.mocwww.com& j0 V2 q- ]4 b. R' p# C" f5 v
結果發現 你每多一個確認框 妖城在线论坛! _: w0 j7 X+ k' J1 [
所以你就要多一個判斷 是不是 跟一開始的人相同
/ u3 D* D/ j: U; h4 n2 J
( z& Y% W5 ?6 O8 S/ kbbs.mocwww.com不然在確認界面 "還沒按下 按鈕前" 會有一堆變數 一堆可能性 會產生BUG1 ~5 B& h) r) G5 T5 f# a" Y
" S* G4 w! f6 n5 S/ l& E& \魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表越多視窗 越多判斷-..-
作者: ﹎▓ヾ僤莼べ 时间: 2016-4-29 22:39
随便写的,没怎么测试。。魔力私服,最新魔力宝贝私服技术交流3 r; I1 l% X* M x, s: L- V* m
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート) @* ?% i6 O5 }! [4 }& @) I- b
试试看吧,架构还是你之前的,我只是做出来效果而已。
( R9 m! ^9 a# X9 F2 @妖城在线论坛—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 w5 }5 r, x$ W% @
另外,我不建议在人物身上挂任何的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 来判断。。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート: p2 e$ G) h E2 X3 y8 B# m1 {
妖城在线论坛8 F S# k& k9 z5 b+ Z. ~9 Q
很多种方式的,完全看你怎么来做。魔力私服,最新魔力宝贝私服技术交流- M& S1 v e* D8 D7 B' q: p
魔力私服,最新魔力宝贝私服技术交流, u7 t/ R& ?# G6 A( A. M
框架多并不代表一定会出现BUG,还是看实现思路。
8 i. H4 s7 Q$ k% C) s* L魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表$ \; k F) C$ e' c; _引用:
原帖由 jeff10363 于 2016-4-29 13:16 发表
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート% s; a) G1 p# z/ O% P
我昨天在完善踢人的那個LUA="""= 跟你一樣的情況魔力私服,最新魔力宝贝私服技术交流# D7 T' F; G, o& |: T
2 u1 Z) O' Q) Y" Q
結果發現 你每多一個確認框
# V4 w. b& b' I6 d- a8 l v魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表所以你就要多一個判斷 是不是 跟一開始的人相同
4 H' S7 ~7 P# h3 {0 F魔力私服,最新魔力宝贝私服技术交流bbs.mocwww.com" P8 n9 V2 d, b( S: ^( O' i
不然在確認界面 "還沒按下 按鈕前" 會有一堆變數 一堆可能性 會產生BUG魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表! g+ b/ t- t& u/ ]0 H- y' A
魔力私服,最新魔力宝贝私服技术交流# ]0 M. g$ N. A& Y
越多 ...
作者: ﹎▓ヾ僤莼べ 时间: 2016-4-29 22:43
利用 WindowBuffer, 在tagChar_player_work里
5 J6 \2 g& R" Q9 d- o3 a魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
9 g" Z; t# |6 a魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力默认也是采用的WindowBuffer来缓存临时数据。妖城在线论坛 O; ~7 f& |# P& Q* L& [
7 d( a& x3 J5 q5 s5 l$ r# }引用:
原帖由 易凡 于 2016-4-28 13:44 发表
妖城在线论坛# j7 g2 _7 m1 r5 d! ?
这样就可以了。新建立一个NPC,用来触发弹窗事件。bbs.mocwww.com5 |, z( y' f" ?4 a5 X4 E# d8 f
' m% \4 r+ ?4 ~ a—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート然后加一个临时表,用来缓存对象实例
作者: nijiechao 时间: 2016-4-29 22:55
引用:
原帖由 ﹎▓ヾ僤莼べ 于 2016-4-29 22:43 发表 
8 b% t, g6 I* a' X) P2 t9 {—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート利用 WindowBuffer, 在tagChar_player_work里—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート- h; w" L9 U% ^
魔力私服,最新魔力宝贝私服技术交流6 K' ? B8 ^0 t( |: K1 h& C: H
魔力默认也是采用的WindowBuffer来缓存临时数据。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 l, j9 x! J8 e6 e; v P" v
6 E0 q6 ?) _: E. z% z魔力私服,最新魔力宝贝私服技术交流
- u" j3 B! ]% [) S! U
魔力默认也是采用的WindowBuffer来缓存临时数据?你真逗,缓冲寄存器就缓冲寄存器嘛bbs.mocwww.com/ F" A3 v: ^/ L# L( Z
* E. o$ b% m! L c1 Z( C/ p妖城在线论坛[ 本帖最后由 HookSend 于 2016-4-30 11:51 编辑 ]
作者: 易凡 时间: 2016-4-29 23:44
魔力本身确实用WindowBuffer缓存的
) a9 `5 t9 C4 g" j* ~8 Q# hbbs.mocwww.com
6 L0 G6 c& @7 nbbs.mocwww.com我台服引擎那边,lua的所有选择宠物和道具的位置缓存也都用这个。
! w1 w% l$ B9 X# I) i: D# F妖城在线论坛魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表; l! g' A g8 s3 k/ v
星夜说的并无错。。。。。。: I$ n! `7 V$ o+ l# l5 |1 P
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表9 b# D( P, l4 C; e9 q& {+ r+ m: g
好好沟通交流。。。。不要太暴躁。。。
| 欢迎光临 妖城在线论坛 (http://bbs.mocwww.com/) |
Powered by Discuz! 6.0.0 |