Ihr benötigt eigentlich nur:
- Mathe
- WorldServer Source
- Skills
So dann fangen wir mal an, als erstes öffnen wir im Source Ordner entweder "All" oder nur die "WorldServer" Source, mir ist es egal, jeh nachdem wie ihr besser Arbeiten könnt.
So als nächstes sucht ihr für die All User natürlich das Project "WorldServer" bei dennen die All nicht haben brauch ich denk ich net viel sagen
Dann sind da ein Paar order, z.b.: "Header Files", "Source Files", "Resource Files", und und und, wir brauchen aber nur "Source Files" so damit wir net lange suchen müssen, hat Gala da bissl Hirn gehabt, und nannte die eine Datei die wir brauchen ganz kurz und Knapp: "AttackArbiter.cpp" und ja diese Öffnen.
Als erstes seht ihr sowas:
PHP Code:
#include "stdafx.h"
#include "DefineObj.h"
#include "defineSkill.h"
#include "ActionMover.h"
#include "User.h"
#include "defineitem.h"
#include "AttackArbiter.h"
#include "guild.h"
extern CGuildMng g_GuildMng;
extern CUserMng g_UserMng;
#include "party.h"
extern CPartyMng g_PartyMng;
#include "dpdatabaseclient.h"
extern CDPDatabaseClient g_dpDBClient;
#ifdef __EVENT_MONSTER
#include "EventMonster.h"
#endif // __EVENT_MONSTER
#if __VER >= 12 // __NEW_ITEMCREATEMON_SERVER
#include "CreateMonster.h"
#endif // __NEW_ITEMCREATEMON_SERVER
//////////////////////////////////////////////////////////////////////
// ATTACK_INFO
//////////////////////////////////////////////////////////////////////
ATK_TYPE ATTACK_INFO::GetAtkType() const
Aber wir brauchen nur die Funktion:
PHP Code:
int CAttackArbiter::PostAsalraalaikum()
Die ganze Funktion sieht so aus:
PHP Code:
int CAttackArbiter::PostAsalraalaikum()
{
int nAddDmg = 0;
LPSKILL pSkill = m_pAttacker->GetSkill( SI_BIL_PST_ASALRAALAIKUM );
DWORD dwSkillLevel =
#ifdef __SKILL0517
m_pAttacker->GetSkillLevel( pSkill );
#else // __SKILL0517
pSkill ? pSkill->dwLevel : 0;
#endif // __SKILL0517
#if __VER >= 12 // __MONSTER_SKILL
if( m_pAttacker->IsNPC() )
dwSkillLevel = CMonsterSkill::GetInstance()->GetMonsterSkillLevel( m_pAttacker, SI_BIL_PST_ASALRAALAIKUM );
#endif // __MONSTERSKILL
switch( dwSkillLevel )
{
case 1: nAddDmg = 20; break;
case 2: nAddDmg = 30; break;
case 3: nAddDmg = 40; break;
case 4: nAddDmg = 50; break;
case 5: nAddDmg = 60; break;
case 6: nAddDmg = 70; break;
case 7: nAddDmg = 80; break;
case 8: nAddDmg = 90; break;
case 9: nAddDmg = 100; break;
case 10: nAddDmg = 150; break;
}
int nMP = m_pAttacker->GetManaPoint(); // ÀÏ´Ü ¹Þ¾Æ³õ°í
if( m_pAttacker->IsPlayer() && m_pAttacker->IsSMMode( SM_MAINTAIN_MP ) == FALSE ) // MP À¯·á¾ÆÀÌÅÛ ¸Ô¾úÀ»¶§´Â MP´â¸é ¾ÈµÈ´Ù.
m_pAttacker->SetPointParam( DST_MP, 0 ); // 0À¸·Î ¸¸µë.
return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg );
}
PHP Code:
return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg );
STR: 500
MP: 5000
Asal +10 Skilled
So nun würde die Rechnung wie folgt aussehen:
PHP Code:
((500 / 10) * 10 * (5 + (5 000 / 10))) + 150 = 252 650
Wichtig hierbei, ihr dürft die Klammern die ändern o. Entfernen, sonst verfälscht sich der Ergibnis.
Nun, was machen wir?
Folgendes:
PHP Code:
Old:
return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg );
New:
return ( ( ( m_pAttacker->GetStr() / 15 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg );
PHP Code:
Old:
((500 / 10) * 10 * (5 + (5 000 / 10))) + 150 = 252 650
New:
((500 / 15) * 10 * (5 + (5 000 / 10))) + 150 = 168 483
So nun könnt ihr diese verfeinern wie ihr wollt, z.b. die "AddDmg" erhöhen um 1000 oder verringern, ihr könnt mehr tügen einbauen das wenn man z.b. ein Scroll an hat was Special ist, kann sie die DMG verdoppeln oder verringern euch überlassen.
Das wars auch schon von mir, danke fürs Lesen.
Mfg Crasy.






