Moin,
da ich eben mal wieder umständliche Workarounds gesehen habe, hier ne richtige Lösung dafür, dass Bosse einen nichtmehr in Wände werfen können.
In der char_skill.cpp sucht ihr das Struct: FuncSplashDamage und sucht fast am Ende folgendes:
C: char_skill.cpp
- GetDeltaByDegree(degree, fCrushSlidingLength, &fx, &fy);
- sys_log(0, "CRUSH! %s -> %s (%d %d) -> (%d %d)", m_pkChr->GetName(), pkChrVictim->GetName(), pkChrVictim->GetX(), pkChrVictim->GetY(), (long)(pkChrVictim->GetX() + fx), (long)(pkChrVictim->GetY() + fy));
- long tx = (long)(pkChrVictim->GetX() + fx);
- long ty = (long)(pkChrVictim->GetY() + fy);
darunter fügt ihr folgendes:
C: char_skill.cpp
- //FIX BOSS KICK WALL
- //While toX and toY are not allowed attr, reduce the slidingLength and recalculate the endpoint
- while (pkChrVictim->GetSectree()->GetAttribute(tx, ty) & (ATTR_BLOCK | ATTR_OBJECT) && fCrushSlidingLength > 0)
- {
- if (fCrushSlidingLength >= 10)
- {
- fCrushSlidingLength -= 10;
- }
- else
- {
- fCrushSlidingLength = 0;
- }
- GetDeltaByDegree(degree, fCrushSlidingLength, &fx, &fy);
- tx = (long)(pkChrVictim->GetX() + fx);
- ty = (long)(pkChrVictim->GetY() + fy);
- }
Diese Schleife errechnet den maximal möglichen Radius den der Boss euch werfen kann. (Kollidierend mit ATTR_BLOCK oder ATTR_OBJECT).
Wichtig hierbei: Die "server.attr" der Maps müssen auch entsprechend korrekt sein.
Viel Spaß damit.