引用 | 编辑
calove00
2010-04-07 11:31 |
楼主
▼ |
||
x0
有时看到有些amxx是这的public function(id) { return xxxxxxxx(id) } xxxxx(id) 那儿其实是怎么才会触发... 我不用上这.. 但看别的有用... 想知道 x0
|
引用 | 编辑
Abcdzxc555
2010-04-07 12:24 |
1楼
▲ ▼ |
return XXXXXX(id)?? 有这样的指令吗
应该是 return PLUGIN_CONTINUE;等等的吧 x0 |
引用 | 编辑
lkh1018
2010-04-07 13:22 |
2楼
▲ ▼ |
return XXXXXX(id)?? 有这样的指令吗
有!! 例如 public event_ResetHUD(id) { if(is_user_alive(id)) return function2(id) if(is_user_bot(id)) return function3(id) return function4(id) } function2(id) { ... ... ... return PLUGIN_CONTINUE } function3(id) { ... ... ... return PLUGIN_HANDLED } function4(id) { ... ... ... return PLUGIN_HANDLED_MAIN } 例如ResetHUD这event被触法 而那人是在生的, 就会跑到function2(id), 而function2(id)最后是return plugin_continue, 那function1(id)那里的function2(id)的value就是plugin_continue 那function1(id)最后return的就是plugin_continue 所以这段编码就是, 而那人是在生的, 就return plugin_continue 而那人是死亡又是bot的, 就return plugin_handled 而其余的, 就return plugin_handled_main x0 |
引用 | 编辑
chuchung712
2010-04-07 17:28 |
3楼
▲ ▼ |
引用 | 编辑
a7811311622
2010-04-07 17:45 |
4楼
▲ ▼ |
引用 | 编辑
chuchung712
2010-04-07 18:38 |
5楼
▲ ▼ |
下面是引用 a7811311622 于 2010-04-07 17:45 发表的 : 这是AlliedModders的黄金AK插件中的其中一部分 @@ 复制程式 public checkWeapon(id) { new plrClip, plrAmmo, plrWeap[32] new plrWeapId plrWeapId = get_user_weapon(id, plrClip , plrAmmo) if (plrWeapId == CSW_AK47 && g_HasAk[id]) { checkModel(id) } else { return PLUGIN_CONTINUE } if (plrClip == 0 && get_pcvar_num(cvar_uclip)) { // If the user is out of ammo.. get_weaponname(plrWeapId, plrWeap, 31) // Get the name of their weapon give_item(id, plrWeap) engclient_cmd(id, plrWeap) engclient_cmd(id, plrWeap) engclient_cmd(id, plrWeap) } return PLUGIN_HANDLED } x0 |
引用 | 编辑
a7811311622
2010-04-07 18:58 |
6楼
▲ ▼ |
下面是引用 chuchung712 于 2010-04-07 18:38 发表的 : 复制程式 public checkWeapon(id) { new plrClip, plrAmmo, plrWeap[32] .......[/quote] [code] public checkWeapon(id) { new plrClip, plrAmmo, plrWeap[32] new plrWeapId plrWeapId = get_user_weapon(id, plrClip , plrAmmo) if (plrWeapId == CSW_AK47 && g_HasAk[id]) { checkModel(id) } else { return PLUGIN_CONTINUE /* 这段回传的结果是脱离「public checkWeapon(id)」这段假设, 如果条件符合,则从这段开始往下的内容就不会判断和执行 */ } if (plrClip == 0 && get_pcvar_num(cvar_uclip)) { // If the user is out of ammo.. get_weaponname(plrWeapId, plrWeap, 31) // Get the name of their weapon give_item(id, plrWeap) engclient_cmd(id, plrWeap) engclient_cmd(id, plrWeap) engclient_cmd(id, plrWeap) } return PLUGIN_HANDLED // 单纯让上面的「return PLUGIN_CONTINUE」有回传值罢了… } x0 |
引用 | 编辑
chuchung712
2010-04-07 20:30 |
7楼
▲ ▼ |
引用 | 编辑
a7811311622
2010-04-07 21:05 |
8楼
▲ ▼ |
引用 | 编辑
chuchung712
2010-04-08 11:09 |
9楼
▲ ▼ |
下面是引用 a7811311622 于 2010-04-07 21:05 发表的 : 恩... 发现了 复制程式 #define PLUGIN_CONTINUE 0 /* Results returned by public functions */ #define PLUGIN_HANDLED 1 /* stop other plugins */ #define PLUGIN_HANDLED_MAIN 2 /* to use in client_command(), continue all plugins but stop the command */ if 里面可以有 PLUGIN_HANDLED 的吗? 反之 public 里, if 外面可以有 PLUGIN_CONTINUE 吗? x0 |
引用 | 编辑
a7811311622
2010-04-08 11:18 |
10楼
▲ ▼ |
下面是引用 chuchung712 于 2010-04-08 11:09 发表的 : 「if 里面可以有 PLUGIN_HANDLED 的吗?」: 可以,PLUGIN_CONTINUE和PLUGIN_HANDLED的差异只是影响程度大小。 「public 里, if 外面可以有 PLUGIN_CONTINUE 吗?」: 可以,就如同中途在public里加上continue是一样的,只会执行该段public里continue以上的内容。 x0 |
引用 | 编辑
chuchung712
2010-04-08 11:35 |
11楼
▲ ▼ |
引用 | 编辑
a7811311622
2010-04-08 11:45 |
12楼
▲ ▼ |
下面是引用 chuchung712 于 2010-04-08 11:35 发表的 : 这篇的4楼有说明:http://bbs.mychat.to/reads.php?tid=829127&page=1#p5903760 x0 |
引用 | 编辑
HsK
2010-04-08 11:49 |
13楼
▲ ▼ |
那 return HAM_SUPERCEDE; 和 return FMRES_SUPERCEDE; 呢-.-
return HAM_ 和 return FMRES_ 又有甚么分别 @@" x0 |
引用 | 编辑
chuchung712
2010-04-08 12:15 |
14楼
▲ ▼ |
下面是引用 a7811311622 于 2010-04-08 11:45 发表的 : 下面是引用 a7811311622 于 2010-04-08 11:18 发表的:那么两个是可以交换使用的了? PLUGIN_HANDLED的程度是较大或较小 = =" 好像怎教也教不明... = =" x0 |
引用 | 编辑
a7811311622
2010-04-08 12:20 |
15楼
▲ ▼ |
下面是引用 sk@.@ 于 2010-04-08 11:49 发表的 : 「return HAM_SUPERCEDE; 和 return FMRES_SUPERCEDE;」: 在"RegisterHam"和"register_forward"中才会用到的,效果类似continue。 「return HAM_ 和 return FMRES_ 又有甚么分别」: "return HAM_"是用在"RegisterHam"里的,而"return FMRES_"是用在"register_forward"里的。 详情请翻阅<ham_const.inc>和<fakemeta_const.inc>的说~ x0 |
引用 | 编辑
a7811311622
2010-04-08 12:26 |
16楼
▲ ▼ |
下面是引用 chuchung712 于 2010-04-08 12:15 发表的 : 下面是引用 storym88349 于 2009-09-22 19:12 发表的 : 以这段解说来看,PLUGIN_HANDLED的程度明显较大~ 使用上…反正效果差不多…如果不太会用…就保守点都用PLUGIN_CONTINUE就好了~ x0 |
引用 | 编辑
chuchung712
2010-04-08 12:31 |
17楼
▲ ▼ |
引用 | 编辑
a7811311622
2010-04-08 14:00 |
18楼
▲ ▼ |
引用 | 编辑
a7811311622
2010-04-08 14:08 |
20楼
▲ ▼ |
引用 | 编辑
chuchung712
2010-04-08 16:40 |
21楼
▲ ▼ |
下面是引用 a7811311622 于 2010-04-08 14:00 发表的 : public Death public NewRound public fw_PlayerPreThink 这3个 ====================================== 复制程式 stock fm_give_item(index, const item[]) { if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10)) return 0; new ent = fm_create_entity(item); if (!pev_valid(ent)) return 0; new Float:origin[3]; pev(index, pev_origin, origin); set_pev(ent, pev_origin, origin); set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN); dllfunc(DLLFunc_Spawn, ent); new save = pev(ent, pev_solid); dllfunc(DLLFunc_Touch, ent, index); if (pev(ent, pev_solid) != save) return ent; engfunc(EngFunc_RemoveEntity, ent); return -1; } 发现有 return -1 了 = = 下面是引用 森之千手 于 2010-04-08 14:04 发表的 :发现你的武器制作是没有return PLUGIN_XXX 的 = =" 都是return 就算了 下面是引用 a7811311622 于 2010-04-08 14:08 发表的 : 不写return都有这效果? x0 |
引用 | 编辑
a7811311622
2010-04-08 17:19 |
22楼
▲ ▼ |
下面是引用 chuchung712 于 2010-04-08 16:40 发表的 : 复制程式 stock fm_give_item(index, const item[]) { if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10)) return 0; // 回传数值0 = 跳脱这个stock new ent = fm_create_entity(item); if (!pev_valid(ent)) return 0; // 同上 new Float:origin[3]; pev(index, pev_origin, origin); set_pev(ent, pev_origin, origin); set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN); dllfunc(DLLFunc_Spawn, ent); new save = pev(ent, pev_solid); dllfunc(DLLFunc_Touch, ent, index); if (pev(ent, pev_solid) != save) return ent; // 回传ent的数值 engfunc(EngFunc_RemoveEntity, ent); return -1; // 让上面的return有回传值(猜测) /* Java或C语法如果return后面有数值的话,后面的数值型态需相同 例如上面return后面全部回传的都是整数 */ } 下面是引用 chuchung712 于 2010-04-08 16:40 发表的 : 也是可以不用到任何return就能完成插件,就看你排版会不会混乱而已… x0 |
引用 | 编辑
chuchung712
2010-04-08 17:46 |
23楼
▲ ▼ |
引用 | 编辑
a7811311622
2010-04-08 18:04 |
24楼
▲ ▼ |
引用 | 编辑
chuchung712
2010-04-08 21:22 |
25楼
▲ ▼ |
引用 | 编辑
calove00
2010-04-09 14:04 |
26楼
▲ ▼ |
你们这班人还未弄清楚什么是
return PLUGIN_CONTINUE return PLUGIN_HANDLED return PLUGIN_HANDLED 是指这个function 停止或关闭 我所问题系 return xxxx(id) 如 return client_cmd(id, "kill") 刚才问了我的朋友 这只是一个简化的用语 即是 复制程式 public function(id) { client_cmd(id, "kill") return } x0 |
引用 | 编辑
a7811311622
2010-04-09 15:01 |
27楼
▲ ▼ |
下面是引用 calove00 于 2010-04-09 14:04 发表的 : 我比较想知道你是问谁… 我说「PLUGIN_CONTINUE」是可能只跳过程式里面的其中几段…你有讨论其他可能的假设吗? 「return PLUGIN_CONTINUE 是指你那个function 可以继续进行 」: 你这句话错的更离谱…在「public function(id) 」用了「return PLUGIN_CONTINUE」后 return以下的内容可是完全跳过…怎么继续进行? 还有… public function(id) { client_cmd(id, "kill") return } 这段后面有没有加return根本就没差… 而这段要呼叫就要用「function(id)」或「return function(id)」了… 居然还说简化后是「return client_cmd(id, "kill")」…? 结论: x0 |
引用 | 编辑
Rubbish-Nec
2010-04-09 15:10 |
28楼
▲ |
下面是引用 calove00 于 2010-04-09 14:04 发表的 : 幸好灵气SMA没放在ZP的scipting里,逃过一劫 抽一小段来看看 复制程式 Reset_Target_Auras_Effect(id) { for (new i = 1; i <= 32; i++) { if (i == id) { continue; } useMight[i] &= ~(1<<id) useBlessed[i] &= ~(1<<id) useFanaticism[i] &= ~(1<<id) useConviction[i] &= ~(1<<id) useVigor[i] &= ~(1<<id) } } 这段东西只有continue;看不懂 直接翻译的结果就是: 如果『i』等于『id』就继续? 还有『 ; 』的用意是? x1 |