• 🎉 Hey there! I've just launched my brand new server voting platform — Metin2 P Servers 🚀

Request Give Basic Weapon-master

Member
Mar
Threads
1
33
0
6
HubMoney
187

AD: Mt2009 - Mobile & PC - 30 January 2026 CHECK THE PRESENTATION!

I have this system downloaded from another place, the thing is : I don't know how to use it.
Might be usefull for someone else, I hope someone will tell us how to implement it.

GiveBasicWeapon.h

#include <vector>
#include <array>
#include "../../common/length.h"
#include "item_manager.h"
using namespace std;
enum
{
MAX_ATTR = ITEM_MANAGER::MAX_NORM_ATTR_NUM + ITEM_MANAGER::MAX_RARE_ATTR_NUM,
COMMON_ITEMS = JOB_MAX_NUM,
};
struct GiveBasicWeapon
{
DWORD dwVnum, count;
bool equip;
array<auto, ITEM_SOCKET_MAX_NUM> sockets;
array<auto, MAX_ATTR> attr_types;
array<auto, MAX_ATTR> attr_vals;
};
vector<GiveBasicWeapon> Give_Items[JOB_MAX_NUM];

auto PrepareItems()
{
Give_Items[COMMON_ITEMS] {
{11200, 1},
{27989, 1},
{50053, 1},
{40002, 1},
{27003, 200},
{27006, 200},
{70038, 1},
{13009, 1, true, {}, {APPLY_CON, APPLY_BLOCK, APPLY_REFLECT_MELEE, APPLY_IMMUNE_STUN, APPLY_STR}, {12, 15, 10, 1, 12}},
{14009, 1, true, {}, {APPLY_MAX_HP, APPLY_MAX_SP, APPLY_PENETRATE_PCT, APPLY_STEAL_HP, APPLY_MANA_BURN_PCT}, {2000, 80, 10, 10, 10}},
{15009, 1, true, {}, {APPLY_MAX_HP, APPLY_MAX_SP, APPLY_MOV_SPEED, APPLY_ATT_SPEED, APPLY_CRITICAL_PCT}, {2000, 80, 8, 8, 10}},
{16009, 1, true, {}, {APPLY_MAX_HP, APPLY_HP_REGEN, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_STEAL_HP}, {2000, 30, 10, 10, 10}},
{17009, 1, true, {}, {APPLY_MOV_SPEED, APPLY_ATTBONUS_ANIMAL, APPLY_POISON_REDUCE, APPLY_ATTBONUS_DEVIL, APPLY_ATTBONUS_UNDEAD}, {20, 20, 5, 20, 20}},
{39036, 1, true},
{76037, 1, true}
}
Give_Items[JOB_WARRIOR] {
{11209, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{19, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12209, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_ASSASSIN] {
{11409, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{1009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12349, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_SURA] {
{11609, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{19, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12489, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_SHAMAN] {
{11809, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{5009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12629, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
#ifdef ENABLE_WOLFMAN_CHARACTER
Give_Items[JOB_WOLFMAN] {
{21009, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{6009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{21509, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
#endif
}
void GiveBasicWeapon(LPCHARACTER ch)
{
PrepareItems();
auto GetHorse = [&ch]()
{
ch->SetHorseLevel(21);
ch->StartRiding();
};
auto MakeFNotice = [](LPCHARACTER ch)
{
array<auto, JOB_MAX_NUM> JobNames {"Warrior", "Assassin", "Sura", "Shaman", "Lycan"};
array<auto, EMPIRE_MAX_NUM> EmpireNames {"전제국","신수국","천조국","진노국"};
array<auto, 256> buf;
snprintf(buf,sizeof(buf), "New player %s, job: %s, empire: %s", ch->GetName(), JobNames[ch->GetJob()], LC_TEXT(EmpireNames[ch->GetEmpire()]));
SendNotice(buf);
};
for (auto subdata : {ch->GetJob(), COMMON_ITEMS}) {
for (auto data : Give_Items[subdata]) {
auto item = ch->AutoGiveItem(data.dwVnum, data.count);
if (item) {
for (auto i = 0; i < MAX_ATTR; i++)
item->SetForceAttribute(i, data.attr_types, data.attr_vals);
for (auto c = 0; c < ITEM_SOCKET_MAX_NUM; c++)
item->SetSocket(c, data.sockets[c]);
if (data.equip)
ch->EquipItem(item);
}
}
}
MakeFNotice(ch);
GetHorse();
}
 
Metin2Hub Bot
M2Hub Bot
Feb
Threads
66
2,365
2
1,293
113
HubMoney
1,678
I have this system downloaded from another place, the thing is : I don't know how to use it.
Might be usefull for someone else, I hope someone will tell us how to implement it.

GiveBasicWeapon.h

#include <vector>
#include <array>
#include "../../common/length.h"
#include "item_manager.h"
using namespace std;
enum
{
MAX_ATTR = ITEM_MANAGER::MAX_NORM_ATTR_NUM + ITEM_MANAGER::MAX_RARE_ATTR_NUM,
COMMON_ITEMS = JOB_MAX_NUM,
};
struct GiveBasicWeapon
{
DWORD dwVnum, count;
bool equip;
array<auto, ITEM_SOCKET_MAX_NUM> sockets;
array<auto, MAX_ATTR> attr_types;
array<auto, MAX_ATTR> attr_vals;
};
vector<GiveBasicWeapon> Give_Items[JOB_MAX_NUM];

auto PrepareItems()
{
Give_Items[COMMON_ITEMS] {
{11200, 1},
{27989, 1},
{50053, 1},
{40002, 1},
{27003, 200},
{27006, 200},
{70038, 1},
{13009, 1, true, {}, {APPLY_CON, APPLY_BLOCK, APPLY_REFLECT_MELEE, APPLY_IMMUNE_STUN, APPLY_STR}, {12, 15, 10, 1, 12}},
{14009, 1, true, {}, {APPLY_MAX_HP, APPLY_MAX_SP, APPLY_PENETRATE_PCT, APPLY_STEAL_HP, APPLY_MANA_BURN_PCT}, {2000, 80, 10, 10, 10}},
{15009, 1, true, {}, {APPLY_MAX_HP, APPLY_MAX_SP, APPLY_MOV_SPEED, APPLY_ATT_SPEED, APPLY_CRITICAL_PCT}, {2000, 80, 8, 8, 10}},
{16009, 1, true, {}, {APPLY_MAX_HP, APPLY_HP_REGEN, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_STEAL_HP}, {2000, 30, 10, 10, 10}},
{17009, 1, true, {}, {APPLY_MOV_SPEED, APPLY_ATTBONUS_ANIMAL, APPLY_POISON_REDUCE, APPLY_ATTBONUS_DEVIL, APPLY_ATTBONUS_UNDEAD}, {20, 20, 5, 20, 20}},
{39036, 1, true},
{76037, 1, true}
}
Give_Items[JOB_WARRIOR] {
{11209, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{19, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12209, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_ASSASSIN] {
{11409, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{1009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12349, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_SURA] {
{11609, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{19, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12489, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_SHAMAN] {
{11809, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{5009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12629, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
#ifdef ENABLE_WOLFMAN_CHARACTER
Give_Items[JOB_WOLFMAN] {
{21009, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{6009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{21509, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
#endif
}
void GiveBasicWeapon(LPCHARACTER ch)
{
PrepareItems();
auto GetHorse = [&ch]()
{
ch->SetHorseLevel(21);
ch->StartRiding();
};
auto MakeFNotice = [](LPCHARACTER ch)
{
array<auto, JOB_MAX_NUM> JobNames {"Warrior", "Assassin", "Sura", "Shaman", "Lycan"};
array<auto, EMPIRE_MAX_NUM> EmpireNames {"전제국","신수국","천조국","진노국"};
array<auto, 256> buf;
snprintf(buf,sizeof(buf), "New player %s, job: %s, empire: %s", ch->GetName(), JobNames[ch->GetJob()], LC_TEXT(EmpireNames[ch->GetEmpire()]));
SendNotice(buf);
};
for (auto subdata : {ch->GetJob(), COMMON_ITEMS}) {
for (auto data : Give_Items[subdata]) {
auto item = ch->AutoGiveItem(data.dwVnum, data.count);
if (item) {
for (auto i = 0; i < MAX_ATTR; i++)
item->SetForceAttribute(i, data.attr_types, data.attr_vals);
for (auto c = 0; c < ITEM_SOCKET_MAX_NUM; c++)
item->SetSocket(c, data.sockets[c]);
if (data.equip)
ch->EquipItem(item);
}
}
}
MakeFNotice(ch);
GetHorse();
}

Hello dear user,

Your post will be under surveillance by bots for the next few hours.

Forum description : Metin2 private server, Metin2 download, Metin2 support, Metin2 Forum, Metin2 Pvp Servers, Errors, Bugs, Requests, Metin2 Pvp Forum, Everything About Metin2.
 
Member
Mar
Threads
1
33
0
6
HubMoney
187
I have this system downloaded from another place, the thing is : I don't know how to use it.
Might be usefull for someone else, I hope someone will tell us how to implement it.

GiveBasicWeapon.h

#include <vector>
#include <array>
#include "../../common/length.h"
#include "item_manager.h"
using namespace std;
enum
{
MAX_ATTR = ITEM_MANAGER::MAX_NORM_ATTR_NUM + ITEM_MANAGER::MAX_RARE_ATTR_NUM,
COMMON_ITEMS = JOB_MAX_NUM,
};
struct GiveBasicWeapon
{
DWORD dwVnum, count;
bool equip;
array<auto, ITEM_SOCKET_MAX_NUM> sockets;
array<auto, MAX_ATTR> attr_types;
array<auto, MAX_ATTR> attr_vals;
};
vector<GiveBasicWeapon> Give_Items[JOB_MAX_NUM];

auto PrepareItems()
{
Give_Items[COMMON_ITEMS] {
{11200, 1},
{27989, 1},
{50053, 1},
{40002, 1},
{27003, 200},
{27006, 200},
{70038, 1},
{13009, 1, true, {}, {APPLY_CON, APPLY_BLOCK, APPLY_REFLECT_MELEE, APPLY_IMMUNE_STUN, APPLY_STR}, {12, 15, 10, 1, 12}},
{14009, 1, true, {}, {APPLY_MAX_HP, APPLY_MAX_SP, APPLY_PENETRATE_PCT, APPLY_STEAL_HP, APPLY_MANA_BURN_PCT}, {2000, 80, 10, 10, 10}},
{15009, 1, true, {}, {APPLY_MAX_HP, APPLY_MAX_SP, APPLY_MOV_SPEED, APPLY_ATT_SPEED, APPLY_CRITICAL_PCT}, {2000, 80, 8, 8, 10}},
{16009, 1, true, {}, {APPLY_MAX_HP, APPLY_HP_REGEN, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_STEAL_HP}, {2000, 30, 10, 10, 10}},
{17009, 1, true, {}, {APPLY_MOV_SPEED, APPLY_ATTBONUS_ANIMAL, APPLY_POISON_REDUCE, APPLY_ATTBONUS_DEVIL, APPLY_ATTBONUS_UNDEAD}, {20, 20, 5, 20, 20}},
{39036, 1, true},
{76037, 1, true}
}
Give_Items[JOB_WARRIOR] {
{11209, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{19, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12209, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_ASSASSIN] {
{11409, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{1009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12349, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_SURA] {
{11609, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{19, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12489, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
Give_Items[JOB_SHAMAN] {
{11809, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{5009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{12629, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
#ifdef ENABLE_WOLFMAN_CHARACTER
Give_Items[JOB_WOLFMAN] {
{21009, 1, true, {28442, 0, 0}, {APPLY_MAX_HP, APPLY_CAST_SPEED, APPLY_STEAL_HP, APPLY_REFLECT_MELEE, APPLY_ATT_GRADE_BONUS}, {2000, 20, 10, 10, 50}},
{6009, 1, true, {28430, 0, 0}, {APPLY_STR, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT, APPLY_ATTBONUS_ANIMAL, APPLY_STUN_PCT}, {12, 10, 10, 20, 8}},
{21509, 1, true, {}, {APPLY_ATT_SPEED, APPLY_HP_REGEN, APPLY_ATTBONUS_ANIMAL, APPLY_DODGE, APPLY_STEAL_HP}, {8, 30, 20, 15, 10}},
}
#endif
}
void GiveBasicWeapon(LPCHARACTER ch)
{
PrepareItems();
auto GetHorse = [&ch]()
{
ch->SetHorseLevel(21);
ch->StartRiding();
};
auto MakeFNotice = [](LPCHARACTER ch)
{
array<auto, JOB_MAX_NUM> JobNames {"Warrior", "Assassin", "Sura", "Shaman", "Lycan"};
array<auto, EMPIRE_MAX_NUM> EmpireNames {"전제국","신수국","천조국","진노국"};
array<auto, 256> buf;
snprintf(buf,sizeof(buf), "New player %s, job: %s, empire: %s", ch->GetName(), JobNames[ch->GetJob()], LC_TEXT(EmpireNames[ch->GetEmpire()]));
SendNotice(buf);
};
for (auto subdata : {ch->GetJob(), COMMON_ITEMS}) {
for (auto data : Give_Items[subdata]) {
auto item = ch->AutoGiveItem(data.dwVnum, data.count);
if (item) {
for (auto i = 0; i < MAX_ATTR; i++)
item->SetForceAttribute(i, data.attr_types, data.attr_vals);
for (auto c = 0; c < ITEM_SOCKET_MAX_NUM; c++)
item->SetSocket(c, data.sockets[c]);
if (data.equip)
ch->EquipItem(item);
}
}
}
MakeFNotice(ch);
GetHorse();
}
I found the solution and I would like to share with you.
(source )

//service.h add

#define ENABLE_GIVE_BASIC_WEAPON

//char.cpp search for void CHARACTER::SetEmpire(BYTE bEmpire) and paste before:

#ifdef ENABLE_GIVE_BASIC_WEAPON
void CHARACTER::addbonus(LPCHARACTER ch)
{
BYTE job = ch->GetJob();
LPITEM item;


switch (job)
{
case JOB_WARRIOR:
case JOB_ASSASSIN:
case JOB_SURA:
case JOB_SHAMAN:
case JOB_WOLFMAN:
{
// -- bonus de casco
item = ch->GetWear(WEAR_HEAD);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_ATTBONUS_UNDEAD, 20);
item->SetForceAttribute( 1, APPLY_ATTBONUS_ANIMAL, 20);
item->SetForceAttribute( 2, APPLY_ATTBONUS_ORC, 20);
item->SetForceAttribute( 3, APPLY_ATTBONUS_MILGYO, 20);
item->SetForceAttribute( 4, APPLY_ATTBONUS_DEVIL, 20);
}
// -- bonus de arma
item = ch->GetWear(WEAR_WEAPON);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_STR, 12);
item->SetForceAttribute( 1, APPLY_CRITICAL_PCT, 10);
item->SetForceAttribute( 2, APPLY_ATTBONUS_UNDEAD, 20);
item->SetForceAttribute( 3, APPLY_ATTBONUS_ANIMAL, 20);
item->SetForceAttribute( 4, APPLY_ATTBONUS_ORC, 20);
}
// -- bonus de escudo
item = ch->GetWear(WEAR_SHIELD);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_STR, 12);
item->SetForceAttribute( 1, APPLY_IMMUNE_STUN, 1);
item->SetForceAttribute( 2, APPLY_BLOCK, 15);
item->SetForceAttribute( 3, APPLY_GOLD_DOUBLE_BONUS, 20);
item->SetForceAttribute( 4, APPLY_EXP_DOUBLE_BONUS, 20);
}
// -- bonus de armadura
item = ch->GetWear(WEAR_BODY);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
item->SetForceAttribute( 1, APPLY_RESIST_BOW, 15);
item->SetForceAttribute( 2, APPLY_RESIST_FIRE, 15);
item->SetForceAttribute( 3, APPLY_RESIST_MAGIC, 15);
item->SetForceAttribute( 4, APPLY_ATT_GRADE_BONUS, 50);
}
// -- bonus de zapato
item = ch->GetWear(WEAR_FOOTS);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
item->SetForceAttribute( 1, APPLY_CRITICAL_PCT, 10);
item->SetForceAttribute( 2, APPLY_GOLD_DOUBLE_BONUS, 20);
item->SetForceAttribute( 3, APPLY_EXP_DOUBLE_BONUS, 20);
item->SetForceAttribute( 4, APPLY_RESIST_BOW, 15);
}
// -- bonus de brazalete
item = ch->GetWear(WEAR_WRIST);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
item->SetForceAttribute( 1, APPLY_PENETRATE_PCT, 10);
item->SetForceAttribute( 2, APPLY_ITEM_DROP_BONUS, 20);
item->SetForceAttribute( 3, APPLY_ATTBONUS_ORC, 20);
item->SetForceAttribute( 4, APPLY_RESIST_MAGIC, 15);
}
// -- bonus de collar
item = ch->GetWear(WEAR_NECK);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
item->SetForceAttribute( 1, APPLY_CRITICAL_PCT, 10);
item->SetForceAttribute( 2, APPLY_GOLD_DOUBLE_BONUS, 20);
item->SetForceAttribute( 3, APPLY_EXP_DOUBLE_BONUS, 20);
item->SetForceAttribute( 4, APPLY_RESIST_BOW, 15);
}
// -- bonus de pendiente
item = ch->GetWear(WEAR_EAR);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute( 0, APPLY_ATTBONUS_UNDEAD, 20);
item->SetForceAttribute( 1, APPLY_ATTBONUS_ORC, 20);
item->SetForceAttribute( 2, APPLY_ATTBONUS_ANIMAL, 20);
item->SetForceAttribute( 3, APPLY_RESIST_BOW, 15);
item->SetForceAttribute( 4, APPLY_ITEM_DROP_BONUS, 20);
}
}
break;
}
ch->ComputePoints();
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
ch->Save();
}

void CHARACTER::additems(LPCHARACTER ch)
{
BYTE job = ch->GetJob();
LPITEM item;
for (int i = 0; i < 6; i++)
{
item = ch->GetWear(i);
if (item != NULL)
ch->UnequipItem(item);
}
item = ch->GetWear(WEAR_SHIELD);
if (item != NULL)
ch->UnequipItem(item);

switch (job)
{
//sura
case JOB_SURA:
{

item = ITEM_MANAGER::instance().CreateItem(19 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(11609 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(12489 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(13009);
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(14009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(15009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(16009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(17009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
}
break;
//guerrero
case JOB_WARRIOR:
{

item = ITEM_MANAGER::instance().CreateItem(19 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(11209 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(12209 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(13009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(14009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(15009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(16009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(17009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
}
break;
//chaman
case JOB_SHAMAN:
{

item = ITEM_MANAGER::instance().CreateItem(7009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(11809 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(12629 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(13009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(14009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(15009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(16009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(17009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
}
break;
//ninja
case JOB_ASSASSIN:
{
item = ITEM_MANAGER::instance().CreateItem(19 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(11409 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(12349 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(13009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(14009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(15009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(16009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(17009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
}
break;
//licano
case JOB_WOLFMAN:
{
item = ITEM_MANAGER::instance().CreateItem(6009);
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(21009);
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(21509 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(13009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(14009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(15009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(16009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
item = ITEM_MANAGER::instance().CreateItem(17009 );
if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
M2_DESTROY_ITEM(item);
}
break;
}
}
#endif

//char.h search for BYTE GetGMLevel() const; and paste before that line between void SetLevel(BYTE level);

#ifdef ENABLE_GIVE_BASIC_WEAPON
void addbonus(LPCHARACTER ch);
void additems(LPCHARACTER ch);
#endif

//questlua_pc.cpp find this one almost at the beginning and paste after:

namespace quest
{
//
// "pc" Lua functions
//

#ifdef ENABLE_GIVE_BASIC_WEAPON
int pc_addbonus(lua_State* L)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if(ch)
ch->addbonus(ch);
return 0;
}
int pc_additems(lua_State* L)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if(ch)
ch->additems(ch);
return 0;
}
#endif

// and search for { NULL, NULL } and paste before

#ifdef ENABLE_GIVE_BASIC_WEAPON
{"addbonus", pc_addbonus },
{"additems", pc_additems },
#endif
THIS IS THE QUEST NECESSARY FOR IT TO WORK CORRECTLY, I DON'T THINK IT IS NECESSARY TO TEACH THEM HOW TO ENTER A QUEST IF SO, FORGET ABOUT ENTERING THE SOURCE XD

quest give_basic_weapon begin
state start begin
when login with pc.getqf("login_weapon") == 0 begin
function character()
local character = {'Warrior ','Ninja ','Sura ','Shaman ','Lycan '}
return character[pc.get_job()+1]
end
function empire_list()
local empire_list = {'Shinsoo','Chunjo','Jinno'}
return empire_list[pc.get_empire()]
end
function gender()
local gender = {'male','female'}
return gender[pc.get_sex()+1]
end
pc.change_gold(500000) --Yang que regalas al inicio
say("")
say("")
say("")
say("")
say_item_vnum(50187) --Con esto solo te dice la quest que recibiste cofre de aprendiz
pc.give_item2("50187",1) --Cofre de Aprendiz Lv1
pc . additems( )
pc . addbonus( )
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.advance()
horse.summon()
horse.ride()
notice_all(pc.get_name().." es un nuevo jugador en KraizySama!")
set_state(__COMPLETE__)
end
end

state __COMPLETE__ begin
finally finally

Add the new functions to quest_funtions in your quest folder in your files.

character
empire_list
gender
pc.addbonus
pc.additems
WELL ABOUT THE APPRENTICE'S TRUNK (50187) YOU ADD THE THINGS YOU WANT TO YOUR TASTE BY MODIFYING OR ADDING IN SPECIAL_ITEM_GROUP.TXT IN YOUR SHARE/LOCALE/GERMANY OR WHATEVER YOU HAVE ON YOUR SERVER.

PROOF THAT IT WORKS CORRECTLY, IN THE SAME WAY ALWAYS DO BACKUP WHEN IT COMES TO MODIFYING SOURCE : v