ºÜ¶à´«ÆæÀϸç°Ú̯ʱ×ܱ»Ð¡¹Ö´òµôѪ£¬ÆäʵֻÐè¸ÄÁ½´¦´úÂë¾ÍÄÜÈýÇÉ«×Ô¶¯Î޵У¡±¾ÎÄÓôó°×»°½ÌÄãÈçºÎÐ޸Ľű¾£¬´Ó´Ë°Ú̯ÎÈÈç·ÀÓùËþ£¬¹ÖÎï½ü²»ÁËÉí£¡
Ïêϸ¼¼Êõ°æ£º
ÎÊÌâ·ÖÎö
´«ÆæÓÎÏ·°Ú̯ĬÈϲ»´¥·¢ÎÞµÐ״̬£¬½ÇÉ«»á³ÖÐøÊܵ½¹ÖÎï¹¥»÷¡£Ðèͨ¹ýÐ޸ķþÎñ¶Ë´úÂ룬ÔÚ°Ú̯ÆÚ¼äÇ¿ÖÆ¿ªÆôÎÞµÐÅж¨¡£
ºËÐÄʵÏÖ²½Öè
1. Ìí¼ÓÎÞµÐ״̬±ê¼Ç
-- ÔÚ½ÇÉ«Êý¾Ý±í£¨Èç Role.lua£©ÖÐÔö¼Ó×Ö¶Î
function Role:OnInit()
self.bIsInvincible = false -- ĬÈÏ·ÇÎÞµÐ
end
2. °Ú̯¿ªÆôʱ¼¤»îÎÞµÐ
-- Ð޸İÚ̯¿ªÊ¼Âß¼£¨Èç Stall.lua£©
function OnStartStall(player)
player.bIsInvincible = true -- ¿ªÆôÎ޵бê¼Ç
player:SendStateEffect(EFFECT_TYPE_IMMUNE) -- ·¢ËÍÎÞµÐÌØÐ§µ½¿Í»§¶Ë
end
3. °Ú̯½áÊøÊ±½â³ýÎÞµÐ
-- Ð޸İÚ̯½áÊøÂß¼
function OnEndStall(player)
player.bIsInvincible = false -- ¹Ø±ÕÎ޵бê¼Ç
player:ClearStateEffect(EFFECT_TYPE_IMMUNE) -- Çå³ý¿Í»§¶ËÌØÐ§
end
4. ÐÞ¸ÄÉ˺¦¼ÆËãÂß¼
// ÔÚÕ½¶·É˺¦¼ÆËãÄ£¿é£¨Èç BattleSystem.cpp£©ÖÐ
bool CalculateDamage(Character* attacker, Character* defender, int& damage) {
if (defender->IsInvincible()) { // ¼ì²éÎ޵бê¼Ç
damage = 0; // Ö±½Ó¹éÁãÉ˺¦Öµ
return false; // ×èÖ¹É˺¦Ê¼þ¼ÌÐø´«µÝ
}
// ...ÔÓÐÉ˺¦¼ÆËãÂß¼...
}
¿Í»§¶Ëͬ²½´¦Àí
// ¿Í»§¶ËÌØÐ§ÏÔʾ£¨Ê¾ÀýʹÓô«ÆæÍ¨ÓÃÐÒ飩
function showInvincibleEffect() {
sendClientCmd(0x7E1, [0x01]); // ·¢ËÍÎÞµÐ×´Ì¬ÌØÐ§°ü
}
function hideInvincibleEffect() {
sendClientCmd(0x7E1, [0x00]); // ÒÆ³ýÌØÐ§
}
×¢ÒâÊÂÏî
1. ״̬ͬ²½£ºÈ·±£·þÎñ¶Ë±ê¼ÇÓë¿Í»§¶ËÌØÐ§Íêȫͬ²½
2. ·ÀÀÄÓûúÖÆ£º½¨ÒéÉèÖÃÎ޵гÖÐøÊ±¼ä£¨¿Éͨ¹ý¶¨Ê±Æ÷×Ô¶¯½â³ý£©
3. °æ±¾ÊÊÅ䣺²»Í¬´«Ææ°æ±¾Ðèµ÷Õû×Ö¶ÎÆ«ÒƵØÖ·£¨Öصã¼ì²é£º
• ½ÇÉ«Êý¾Ý±íÄÚ´æµØÖ·
• É˺¦¼ÆË㺯Êýµ÷ÓÃÔ¼¶¨
• ×´Ì¬ÌØÐ§ÐÒéºÅ£©
²âÊÔÑéÖ¤Çåµ¥
1. °Ú̯ºó¶Ô¹ÖÎïʹÓÃÎïÀí¹¥»÷ÊÇ·ñµôѪ£¿
2. Çл»µØÍ¼ºóÎÞµÐ״̬ÊÇ·ñ±£Áô£¿
3. °Ú̯½áÊøºóÄÜ·ñÕý³£ÁÄÌì½»Ò×£¿
4. ¶àÈ˳¡¾°ÖÐÆäËûÍæ¼ÒÄÜ·ñ¿´µ½ÎÞµÐÌØÐ§£¿
½ø½×ÓÅ»¯½¨Òé
1. Ìí¼ÓÎÞµÐÆÚ¼äÒÆ¶¯ÏÞÖÆ£¨·ÀÖ¹ÀûÓÃÎÞµÐË¢¹Ö£©
2. ÎÞµÐ״̬¼ÓÈëÒôЧ·´À¡£¨ÔöÇ¿ÓÎÏ·ÐÔ£©
3. ¼Ç¼ÎÞµÐ״̬ÈÕÖ¾£¨·ÀÖ¹Íâ¹ÒÀÄÓã©
Ïêϸ¼¼Êõ°æ£º
ÎÊÌâ·ÖÎö
´«ÆæÓÎÏ·°Ú̯ĬÈϲ»´¥·¢ÎÞµÐ״̬£¬½ÇÉ«»á³ÖÐøÊܵ½¹ÖÎï¹¥»÷¡£Ðèͨ¹ýÐ޸ķþÎñ¶Ë´úÂ룬ÔÚ°Ú̯ÆÚ¼äÇ¿ÖÆ¿ªÆôÎÞµÐÅж¨¡£
ºËÐÄʵÏÖ²½Öè
1. Ìí¼ÓÎÞµÐ״̬±ê¼Ç
-- ÔÚ½ÇÉ«Êý¾Ý±í£¨Èç Role.lua£©ÖÐÔö¼Ó×Ö¶Î
function Role:OnInit()
self.bIsInvincible = false -- ĬÈÏ·ÇÎÞµÐ
end
2. °Ú̯¿ªÆôʱ¼¤»îÎÞµÐ
-- Ð޸İÚ̯¿ªÊ¼Âß¼£¨Èç Stall.lua£©
function OnStartStall(player)
player.bIsInvincible = true -- ¿ªÆôÎ޵бê¼Ç
player:SendStateEffect(EFFECT_TYPE_IMMUNE) -- ·¢ËÍÎÞµÐÌØÐ§µ½¿Í»§¶Ë
end
3. °Ú̯½áÊøÊ±½â³ýÎÞµÐ
-- Ð޸İÚ̯½áÊøÂß¼
function OnEndStall(player)
player.bIsInvincible = false -- ¹Ø±ÕÎ޵бê¼Ç
player:ClearStateEffect(EFFECT_TYPE_IMMUNE) -- Çå³ý¿Í»§¶ËÌØÐ§
end
4. ÐÞ¸ÄÉ˺¦¼ÆËãÂß¼
// ÔÚÕ½¶·É˺¦¼ÆËãÄ£¿é£¨Èç BattleSystem.cpp£©ÖÐ
bool CalculateDamage(Character* attacker, Character* defender, int& damage) {
if (defender->IsInvincible()) { // ¼ì²éÎ޵бê¼Ç
damage = 0; // Ö±½Ó¹éÁãÉ˺¦Öµ
return false; // ×èÖ¹É˺¦Ê¼þ¼ÌÐø´«µÝ
}
// ...ÔÓÐÉ˺¦¼ÆËãÂß¼...
}
¿Í»§¶Ëͬ²½´¦Àí
// ¿Í»§¶ËÌØÐ§ÏÔʾ£¨Ê¾ÀýʹÓô«ÆæÍ¨ÓÃÐÒ飩
function showInvincibleEffect() {
sendClientCmd(0x7E1, [0x01]); // ·¢ËÍÎÞµÐ×´Ì¬ÌØÐ§°ü
}
function hideInvincibleEffect() {
sendClientCmd(0x7E1, [0x00]); // ÒÆ³ýÌØÐ§
}
×¢ÒâÊÂÏî
1. ״̬ͬ²½£ºÈ·±£·þÎñ¶Ë±ê¼ÇÓë¿Í»§¶ËÌØÐ§Íêȫͬ²½
2. ·ÀÀÄÓûúÖÆ£º½¨ÒéÉèÖÃÎ޵гÖÐøÊ±¼ä£¨¿Éͨ¹ý¶¨Ê±Æ÷×Ô¶¯½â³ý£©
3. °æ±¾ÊÊÅ䣺²»Í¬´«Ææ°æ±¾Ðèµ÷Õû×Ö¶ÎÆ«ÒƵØÖ·£¨Öصã¼ì²é£º
• ½ÇÉ«Êý¾Ý±íÄÚ´æµØÖ·
• É˺¦¼ÆË㺯Êýµ÷ÓÃÔ¼¶¨
• ×´Ì¬ÌØÐ§ÐÒéºÅ£©
²âÊÔÑéÖ¤Çåµ¥
1. °Ú̯ºó¶Ô¹ÖÎïʹÓÃÎïÀí¹¥»÷ÊÇ·ñµôѪ£¿
2. Çл»µØÍ¼ºóÎÞµÐ״̬ÊÇ·ñ±£Áô£¿
3. °Ú̯½áÊøºóÄÜ·ñÕý³£ÁÄÌì½»Ò×£¿
4. ¶àÈ˳¡¾°ÖÐÆäËûÍæ¼ÒÄÜ·ñ¿´µ½ÎÞµÐÌØÐ§£¿
½ø½×ÓÅ»¯½¨Òé
1. Ìí¼ÓÎÞµÐÆÚ¼äÒÆ¶¯ÏÞÖÆ£¨·ÀÖ¹ÀûÓÃÎÞµÐË¢¹Ö£©
2. ÎÞµÐ״̬¼ÓÈëÒôЧ·´À¡£¨ÔöÇ¿ÓÎÏ·ÐÔ£©
3. ¼Ç¼ÎÞµÐ״̬ÈÕÖ¾£¨·ÀÖ¹Íâ¹ÒÀÄÓã©

