Page 1 of 1

TODO OSPROSE

PostPosted: Sun Aug 31, 2008 6:28 pm
by pepu
Here is a list of things to do (feel free to add to this list)

  • Poison debuff "SHOWS" the damage, and it shouldn´t
  • AOEs debuffs are not working.(tested with hawker skill)
  • Drill always success and the "Success" or "Fail" Animation doesn´t appear.
  • Fairy doesn't appear.
  • Repairing from NPC Doesn´t work
  • HP is completely bugged
  • We should make a drop system based in stb (original system)*
  • Normal Attack formula isn´t working well, in a normal combat the mob will hit you once 100hp for example, and then u will die (losing 800hp), i think I'll rewrite it again*

Done

  • New NormalAttackFormula.
  • New drop system isn´t neccesary, we need a new drop table.

Re: TODO OSPROSE

PostPosted: Sun Aug 31, 2008 7:46 pm
by XxXshidoXxX
We should make a drop system based in stb (original system)


Don't think its usable because the actual Drop stb of na rose 112 is not a good base a lots of drops are fucked up. Purple system is a way better atm .
This stb has been always server side so you can deduce that the 112 one is ... but if you edit it it will be ok . Personally i prefer the way of purple ( more usable )

Re: TODO OSPROSE

PostPosted: Sun Aug 31, 2008 10:25 pm
by Drakia
Yeah... the drops STB hasn't changed at all, since the original ROSE release. PY spent ages working on his drop system, I don't see why you'd change it now?

Re: TODO OSPROSE

PostPosted: Sun Aug 31, 2008 11:02 pm
by PurpleYouko
Normal Attack formula isn´t working well, in a normal combat the mob will hit you once 100hp for example, and then u will die (losing 800hp), i think I'll rewrite it again

Doesn't matter how many times you rewrite the formula. it won't make a bit of difference since the HP stuff (regen, healing and so on) is calculated at the client too.
All we need to do is figure out how to send the data from the server and have the client use that instead of it's own.
Not an easy trick by any means.
As far as the actual formula goes, it's working fine for me. It's the best I have actually seen on any pserver system so let's not mess with it till we figure out the REAL problem. Packet communication.

We should make a drop system based in stb (original system)

The present drop system can handle ANY set of drops you want to put in it.
Just spend your time making the right database drop list. The system itself is just fine.

The other points are well taken.
I will be fixing up the rest of the skill stuff this week (trying to at least)
I've been going through them all bit by bit so the last SVN update is halfway done still.
Pretty much ALL AOE stuff is screwed up still. ;)

Re: TODO OSPROSE

PostPosted: Mon Sep 01, 2008 1:43 am
by pepu
Well i made a new Normal Attack Formula, test it if you want, is working really well for me.

  1. // do normal attack->Pepu
  2. void CCharacter::NormalAttack( CCharacter* Enemy )
  3. {
  4.     Enemy->OnBeAttacked( this );
  5.     Position->destiny  = Position->current;
  6.  
  7.      //iSuc
  8.     float iSuc = rand() % 180;
  9.     iSuc += ((float(Enemy->Stats->Dodge) * 0.7f) - float(Stats->Accury)) + 1.0f;
  10.     iSuc += 10.0f;
  11.     iSuc *= 0.2f;    
  12.     iSuc -= ((Stats->Level - Enemy->Stats->Level)*0.5);  
  13.        
  14.     //CRITICAL RATE->Pepu
  15.  
  16.     int critRate = 10 * (rand() % 100 + 1);
  17.     critRate = 16 * (critRate + Stats->Level + 30);
  18.     critRate = critRate / (Stats->Critical + 70);  
  19.    
  20.     //hitpower formula ->Pepu    
  21.     long int curDamage = 0;    
  22.     long int hitpower = 0;
  23.     bool critical = false;
  24.    
  25.     if (critRate < 20) critical = true;
  26.     if(IsPlayer( ))
  27.     {
  28.          
  29.          if (Stats->magicattack == 1)
  30.          {
  31.            float tempFloat = ((iSuc * 0.06f) + 29) * (int)Enemy->Stats->Attack_Power;
  32.            tempFloat *= (int)Enemy->Stats->Attack_Power - ((int)Enemy->Stats->Defense * 0.8f) + 350;
  33.            curDamage = (int)(tempFloat / ((((int)Enemy->Stats->Dodge * 0.3f) + (int)Enemy->Stats->Magic_Defense + 5) * 640.0f) + 20);
  34.            curDamage -= 15;
  35.          }
  36.          else
  37.          {
  38.            float tempFloat = ((iSuc * 0.05f) + 25) * (int)Enemy->Stats->Attack_Power;
  39.            tempFloat *= (int)Enemy->Stats->Attack_Power - (int)Enemy->Stats->Defense + 400;
  40.            curDamage = (int)(tempFloat / ((((int)Enemy->Stats->Dodge * 0.4f) + (int)Enemy->Stats->Defense + 5.0f) * 420.0f) + 20);
  41.            curDamage -= 15;
  42.          }      
  43.          if(critRate < 20) curDamage+= Stats->Critical;
  44.     }
  45.  
  46.     if(IsMonster( ))
  47.     {                  
  48.          if (Stats->magicattack == 1)
  49.          {
  50.            float tempFloat = ((iSuc * 0.03f) + 30) * (int)Enemy->Stats->Attack_Power;
  51.            tempFloat *= (int)Enemy->Stats->Attack_Power - ((int)Enemy->Stats->Defense * 0.8f) + 280;
  52.            curDamage = (int)(tempFloat / ((((int)Enemy->Stats->Dodge * 0.3f) + (int)Enemy->Stats->Magic_Defense + 5) * 280.0f));
  53.            curDamage -= 10;
  54.          }
  55.          else
  56.          {
  57.            float tempFloat = ((iSuc * 0.03f) + 26) * (int)Enemy->Stats->Attack_Power;
  58.            tempFloat *= (int)Enemy->Stats->Attack_Power - (int)Enemy->Stats->Defense + 250;
  59.            curDamage = (int)(tempFloat / ((((int)Enemy->Stats->Dodge * 0.4f) + (int)Enemy->Stats->Defense + 5.0f) * 145.0f));
  60.            curDamage -= 10;
  61.          }
  62.          if(critRate < 20) curDamage+= Enemy->Stats->Critical;
  63.          }
  64.  
  65.  
  66.    
  67.     hitpower = (long int)curDamage;
  68.     if(hitpower<=5)
  69.     {
  70.         hitpower = 5;
  71.     }
  72.    
  73.     hitpower = (long int)hitpower + GServer->RandNumber(0,10);
  74.  
  75.    
  76.     // dodge->Pepu
  77.    
  78.     float hitvalue = rand() % 180;
  79.     hitvalue += ((float(Enemy->Stats->Dodge) * 0.7f) - float(Stats->Accury)) + 1.0f;
  80.     hitvalue += 10.0f;
  81.     hitvalue *= 0.2f;    
  82.     hitvalue -= ((Stats->Level - Enemy->Stats->Level)*0.5);
  83.     int hitvalue2 = (int)hitvalue;
  84.    
  85.    
  86.     //unsigned int hitvalue = (unsigned int)floor((double)(Stats->Accury * 100 / Enemy->Stats->Dodge));
  87.     if(hitvalue2>=20)
  88.     hitpower = 0; // dodged
  89.     if (hitpower > 0x7ff)//2047 packet size limit.
  90.     {
  91.        hitpower=0x7ff;        
  92.     }
  93.     if(!Enemy->IsSummon( ) && Enemy->IsMonster( ))
  94.     {
  95.         Enemy->AddDamage( this, hitpower );
  96.         Enemy->damagecounter += hitpower;// is for AI
  97.     }
  98.    
  99.     Enemy->Stats->HP -= hitpower;
  100.     BEGINPACKET( pak, 0x799 );
  101.     ADDWORD    ( pak, clientid );
  102.     ADDWORD    ( pak, Battle->atktarget );
  103. #ifdef USE124
  104.     ADDDWORD   ( pak, hitpower );
  105. #endif
  106.  
  107.     if(Enemy->IsDead())
  108.     {
  109.         CDrop* thisdrop = NULL;
  110. #ifndef USE124
  111.         ADDWORD ( pak, hitpower | KILLBIT | (critical ? CRITBIT: 0));
  112. #else
  113.         ADDDWORD   ( pak, critical?28:16 );
  114. #endif
  115.         if(!Enemy->IsSummon( ) && !Enemy->IsPlayer( ))
  116.         {
  117.             thisdrop = Enemy->GetDrop( );
  118.             if(thisdrop!=NULL)
  119.             {
  120.                 ADDFLOAT   ( pak, thisdrop->pos.x*100 );
  121.                 ADDFLOAT   ( pak, thisdrop->pos.y*100 );
  122.                 if(thisdrop->type==1)
  123.                 {
  124.                     ADDWORD( pak, 0xccdf );
  125.                     ADDDWORD( pak, thisdrop->amount );
  126.                 }
  127.                 else
  128.                 {
  129.                     ADDWORD   ( pak, GServer->BuildItemHead( thisdrop->item ) );
  130.                     ADDDWORD   ( pak, GServer->BuildItemData( thisdrop->item ) );
  131.                 }
  132.                 ADDWORD    ( pak, thisdrop->clientid );
  133.                 ADDWORD    ( pak, thisdrop->owner );
  134.                 CMap* map = GServer->MapList.Index[thisdrop->posMap];
  135.                 map->AddDrop( thisdrop );
  136.             }
  137.         }
  138.         GServer->SendToVisible( &pak, Enemy, thisdrop );
  139.         OnEnemyDie( Enemy );
  140.     }
  141.     else
  142.     {
  143. #ifndef USE124
  144.         ADDWORD   ( pak, hitpower | (hitpower > 0 ? ( critical ? CRITBIT : 0) : 0));
  145. #else
  146.         ADDDWORD   ( pak, (hitpower>0?(critical?12:0):0) );
  147. #endif
  148.         GServer->SendToVisible( &pak, Enemy );
  149.     }
  150.     ReduceABC( );
  151.     Battle->lastAtkTime = clock( );
  152. }



Yes, fighting still buggy, our problem is HP atm.
Change Normal Attack formula didn´t fix anything, however it is better, i think.

PY: why don´t u update Ktrose? hehe :P

Re: TODO OSPROSE

PostPosted: Mon Sep 01, 2008 7:30 pm
by PurpleYouko
KTRose is using my very latest code right now.

Note that my code is slightly different than some of the stuff in the SVN.

I have not changed my attack system and i have no intention of doing so. I like it the way it is.
I have also not changed my skill attacks in quite a long time. I will fix it myself when i finish with all the other more complicated crap.