Skill-Reset (Maybe someone needs it?):
Find in your quest.cpp
- case 2: // Skill points
Replace it with:
- case 2: // Skill points
- thisclient->CharInfo->SkillPoints = 0;
- for(unsigned int i=9;i<thisclient->Stats->Level;i++)
- thisclient->CharInfo->SkillPoints += 1;
- for(unsigned int j=0;j<60;j++)//60 = Max :>
- thisclient->cskills[j].thisskill = 0;
- break;
====================
Checking the requirements for upgrading a skill
Find in your Worldpackets.cpp:
- CSkills* thisskill = GetSkillByID( skill );
- if(thisskill==NULL)
- return true;
- if(thisclient->cskills[pos].id!=skill-thisclient->cskills[pos].level)
- return true;
Add afterwards:
- //Checking if the requirements are fulfilled
- for(int j=0;j<3;j++)
- {
- if(thisskill->lskill[j]!=0)
- {
- for(int k=0;k<60;k++) //Maximum = 60 if I'm not mistaken
- {
- if(thisclient->cskills[k].id == thisskill->rskill[j])
- {
- if( thisclient->cskills[k].level < thisskill->lskill[j]) //Current level of the required skill < required level
- {
- return true;
- }
- }
- }
- }
- }
Dropped Points (HP/MP/Stamina/ (CP)). (I am not sure if obtainable points like "HP-Points" and such have been added yet, so they get immediately added. If not, add this please. If they already are, please ignore this piece of code - for your own sake xD)
Find in your WorldPackets.cpp
- bool CWorldServer::pakPickDrop( CPlayer* thisclient, CPacket* P )
Replace everything in it with:
- {
- if(thisclient->Shop->open)
- return true;
- thisclient->RestartPlayerVal( );
- WORD dropid = GETWORD((*P), 0x00);
- CDrop* thisdrop = GetDropByID( dropid, thisclient->Position->Map );
- if (thisdrop==NULL) return true;
- bool flag = false;
- BEGINPACKET( pak, 0x7a7 );
- ADDWORD ( pak, thisdrop->clientid );
- CPlayer* dropowner = 0;
- if( (thisdrop->owner==0 || thisdrop->owner==thisclient->CharInfo->charid || time(NULL)-thisdrop->droptime>=30 ) || ( thisclient->Party->party!=NULL && thisclient->Party->party == thisdrop->thisparty ))
- {
- if( thisclient->Party->party!=NULL )
- {
- unsigned int dropparty = thisclient->Party->party->Option/0x10;
- if( dropparty == 8 ) // Orderly
- {
- unsigned int num = 0;
- bool dpflag = false;
- if( thisdrop->type==1 )
- {
- num = thisclient->Party->party->LastZulies;
- thisclient->Party->party->LastZulies++;
- if( thisclient->Party->party->LastZulies>=thisclient->Party->party->Members.size() )
- thisclient->Party->party->LastZulies = 0;
- }
- else
- if( thisdrop->type==2 )
- {
- num = thisclient->Party->party->LastItem;
- thisclient->Party->party->LastItem++;
- if( thisclient->Party->party->LastItem>=thisclient->Party->party->Members.size() )
- thisclient->Party->party->LastItem = 0;
- }
- unsigned int n = 0;
- while( !dpflag )
- {
- n++;
- if( num>=thisclient->Party->party->Members.size() )
- num = 0;
- dropowner = thisclient->Party->party->Members.at( num );
- if( dropowner == NULL )
- num++;
- else
- {
- dpflag = true;
- num++;
- }
- if(n>20) // not founded yet? >.>
- {
- dropowner = thisclient;
- dpflag = true;
- }
- }
- }
- else // Equal Loot
- {
- dropowner = thisclient;
- }
- }
- else
- {
- dropowner = thisclient;
- }
- if( thisdrop->type == 1 ) //Zulie
- {
- dropowner->CharInfo->Zulies += thisdrop->amount;
- ADDWORD( pak, 0 );
- ADDBYTE( pak, 0 );
- ADDDWORD( pak, 0xccccccdf );
- ADDDWORD( pak, thisdrop->amount );
- dropowner->client->SendPacket( &pak );
- flag = true;
- }
- else
- if( thisdrop->type == 2 ) // Item
- {
- if(thisdrop->item.itemtype==10 && thisdrop->item.itemnum>150 && thisdrop->item.itemnum<191) //Consumables && grabable/instant points
- {
- if(thisdrop->item.itemnum>150 && thisdrop->item.itemnum<161) //HP Points
- {
- if(thisdrop->item.itemnum==151)
- dropowner->Stats->HP += 50;
- else if(thisdrop->item.itemnum==152)
- dropowner->Stats->HP += 100;
- else if(thisdrop->item.itemnum==153)
- dropowner->Stats->HP += 200;
- else if(thisdrop->item.itemnum==154)
- dropowner->Stats->HP += 300;
- else if(thisdrop->item.itemnum==155)
- dropowner->Stats->HP += 500;
- else if(thisdrop->item.itemnum==156)
- dropowner->Stats->HP += 700;
- else if(thisdrop->item.itemnum==157)
- dropowner->Stats->HP += 1000;
- else if(thisdrop->item.itemnum==158)
- dropowner->Stats->HP += 1500;
- else if(thisdrop->item.itemnum==159)
- dropowner->Stats->HP += 2000;
- else
- dropowner->Stats->HP += 3000;
- if(dropowner->Stats->HP > dropowner->Stats->MaxHP)
- dropowner->Stats->HP = dropowner->Stats->MaxHP;
- flag = true;
- }
- else if(thisdrop->item.itemnum>160 && thisdrop->item.itemnum<171) //MP Points
- {
- if(thisdrop->item.itemnum==161)//MP Points
- dropowner->Stats->MP += 30;
- else if(thisdrop->item.itemnum==162)
- dropowner->Stats->MP += 50;
- else if(thisdrop->item.itemnum==163)
- dropowner->Stats->MP += 100;
- else if(thisdrop->item.itemnum==164)
- dropowner->Stats->MP += 200;
- else if(thisdrop->item.itemnum==165)
- dropowner->Stats->MP += 300;
- else if(thisdrop->item.itemnum==166)
- dropowner->Stats->MP += 500;
- else if(thisdrop->item.itemnum==167)
- dropowner->Stats->MP += 700;
- else if(thisdrop->item.itemnum==168)
- dropowner->Stats->MP += 1000;
- else if(thisdrop->item.itemnum==169)
- dropowner->Stats->MP += 1500;
- else
- dropowner->Stats->MP += 2000;
- if(dropowner->Stats->MP > dropowner->Stats->MaxMP)
- dropowner->Stats->MP = dropowner->Stats->MaxMP;
- flag = true;
- }
- else if(thisdrop->item.itemnum>170 && thisdrop->item.itemnum<181) //Stamina
- {
- if(thisdrop->item.itemnum==161)//Stamina Points
- dropowner->Stats->Stamina += 50;
- else if(thisdrop->item.itemnum==162)
- dropowner->Stats->Stamina += 75;
- else if(thisdrop->item.itemnum==163)
- dropowner->Stats->Stamina += 100;
- else if(thisdrop->item.itemnum==164)
- dropowner->Stats->Stamina += 150;
- else if(thisdrop->item.itemnum==165)
- dropowner->Stats->Stamina += 200;
- else if(thisdrop->item.itemnum==166)
- dropowner->Stats->Stamina += 300;
- else if(thisdrop->item.itemnum==167)
- dropowner->Stats->Stamina += 400;
- else if(thisdrop->item.itemnum==168)
- dropowner->Stats->Stamina += 500;
- else if(thisdrop->item.itemnum==169)
- dropowner->Stats->Stamina += 700;
- else
- dropowner->Stats->Stamina += 1000;
- if(dropowner->Stats->Stamina>5000)
- dropowner->Stats->Stamina = 5000;
- flag = true;
- }
- //Currently unsure about it... The real developers should have a look at that one for me. lol.
- /*else if(thisdrop->item.itemnum>180 && thisdrop->item.itemnum<191) //ClanPoints
- {
- MYSQL_RES *result;
- MYSQL_ROW row;
- GServer->DB->QExecute("SELECT cp FROM list_clan WHERE id=%i", dropowner->Clan->clanid);
- result = mysql_store_result(mysql);
- if(mysql_num_rows(result)!=1)
- return true;
- row = mysql_fetch_row(result);
- dropowner->Clan->ClanPoints = atoi(row[0]); //First thing which is missing :/
- if(thisdrop->item.itemnum==181)
- dropowner->Clan->ClanPoints += 1;
- else if(thisdrop->item.itemnum==182)
- dropowner->Clan->ClanPoints += 2;
- else if(thisdrop->item.itemnum==183)
- dropowner->Clan->ClanPoints += 3;
- else if(thisdrop->item.itemnum==184)
- dropowner->Clan->ClanPoints += 5;
- else if(thisdrop->item.itemnum==185)
- dropowner->Clan->ClanPoints += 7;
- else if(thisdrop->item.itemnum==186)
- dropowner->Clan->ClanPoints += 10;
- else if(thisdrop->item.itemnum==187)
- dropowner->Clan->ClanPoints += 15;
- else if(thisdrop->item.itemnum==188)
- dropowner->Clan->ClanPoints += 20;
- else if(thisdrop->item.itemnum==189)
- dropowner->Clan->ClanPoints += 25;
- else if(thisdrop->item.itemnum==190)
- dropowner->Clan->ClanPoints += 30;
- flag = true;
- if(dropowner->Clan->ClanPoints > dropowner->Clan->grade*dropowner->Clan->grade*1000)//1000,4000,9000.... :)
- {
- dropowner->Clan->ClanPoints = 0;
- GServer->DB->QExecute( "UPDATE list_clan SET cp=%i,grade=%i WHERE id=%i",dropowner->Clan->ClanPoints,dropowner->Clan->grade+1,dropowner->Clan->clanid);
- BEGINPACKET( pak, 0x702 );
- ADDSTRING( pak, "Your Clangrade has been increased. Congratulations and good luck with getting the next level.");
- ADDBYTE( pak, 0 );
- thisclient->SendPacket( &pak );
- RESETPACKET( pak, 0x7e0 );
- ADDBYTE ( pak, 0xfa ); //action to update clan informacion
- ADDWORD ( pak, thisclient->Clan->clanid );
- ADDWORD ( pak, thisclient->CharInfo->charid );
- cryptPacket( (char*)&pak, NULL );
- send( csock, (char*)&pak, pak.Size, 0 );
- }
- else
- {
- GServer->DB->QExecute( "UPDATE list_clan SET cp=%i WHERE id=%i", dropowner->Clan->ClanPoints,dropowner->Clan->clanid);
- RESETPACKET( pak, 0x7e0 );
- ADDBYTE ( pak, 0xfa ); //action to update clan informacion
- ADDWORD ( pak, thisclient->Clan->clanid );
- ADDWORD ( pak, thisclient->CharInfo->charid );
- thisclient->SendPacket( &pak );
- cryptPacket( (char*)&pak, NULL );
- }
- }*/
- }
- else
- {
- unsigned int tempslot = dropowner->AddItem( thisdrop->item );
- if(tempslot!=0xffff)// we have slot
- {
- unsigned int slot1 = tempslot;
- unsigned int slot2 = 0xffff;
- if(tempslot>MAX_INVENTORY)
- {
- slot1 = tempslot/1000;
- slot2 = tempslot%1000;
- }
- ADDBYTE ( pak, 0x00 );
- ADDBYTE ( pak, slot1 );
- ADDBYTE ( pak, 0x00 );
- ADDDWORD ( pak, BuildItemHead( dropowner->items[slot1] ) );
- ADDDWORD ( pak, BuildItemData( dropowner->items[slot1] ) );
- dropowner->client->SendPacket( &pak );
- dropowner->UpdateInventory( slot1, slot2 );
- flag = true;
- }
- else
- {
- ADDBYTE (pak, 0x03);
- dropowner->client->SendPacket(&pak);
- }
- }
- }
- }
- else
- {
- ADDBYTE (pak, 0x02);
- thisclient->client->SendPacket(&pak);
- }
- if( flag )
- {
- if( thisclient->Party->party!=NULL )
- {
- unsigned int dropparty = thisclient->Party->party->Option/0x10;
- if( dropparty == 8 )
- {
- BEGINPACKET( pak, 0x7d3 );
- ADDWORD ( pak, dropowner->clientid );
- if( thisdrop->type == 1 )
- {
- ADDDWORD( pak, 0xccccccdf );
- ADDDWORD( pak, thisdrop->amount );
- }
- else
- if( thisdrop->type == 2 )
- {
- ADDDWORD ( pak, BuildItemHead( thisdrop->item ) );
- ADDDWORD ( pak, BuildItemData( thisdrop->item ) );
- }
- thisclient->Party->party->SendToMembers( &pak, dropowner );
- }
- }
- CMap* map = MapList.Index[thisdrop->posMap];
- pthread_mutex_lock( &map->DropMutex );
- map->DeleteDrop( thisdrop );
- pthread_mutex_unlock( &map->DropMutex );
- }
- return true;
- }
I hope you enjoy it.
P.S.: I was "removing" the CP-thingy from the packet, because I wasn't very sure about the current "ClanPoint" stuff at all, since it was missing for me.
Another thing: Please make really sure that you've made a backup of your files before applying this stuff. I really wasn't testing any of it. I wasn't even trying to compile them yet, but it should work fine if it's compilable.