Olá a todos sei que existem outros guia aqui no forum para adiconar custom itens,
Porém faltam algumas informações para funcionar corretamente (em cliente novos no meu caso 2018-06-20)
Item Necessarios
GIT > https://git-scm.com/downloads
Tortoise - > https://tortoisegit.org/download/
NEMO - > https://gitlab.com/4144/Nemo
EXE -> http://nemo.herc.ws/downloads/ (pode se encontrar um aqui para você estou a versão 2018-06-20)
Bom vamos lá.
- Compilar o cliente ( irei usar o NEMO)
Imagem auto explicativa, Segue abaixo:
Dependendo do Seu cliente no passo "3" da imagem, pode dar um erro "Always call SelectKoreaClientInfo" Apenas ignore.
DATA.INI
System/itemInfo_Sak.lub -> para algumas pessoas pode ser necessário mudar dependendo da sua pasta no meu caso não preciso.
Always Load Korea ExternalSetting lua files
Read Data Folder First
Increase Headgear ViewID - > Coloque o numero conforme necessidade vai até 32000 O mais importante ( Não funcionara se não ativar ira dar crash não esqueça de Ativá-lo)
Esses são os necessários porém sintase a vontade de editar seu EXE, conforme sua necessidade, feito isso ficara algo parecido com isso.
Feito isso vamos para pasta do servidor Hercules\db\item_db2.conf
Obs: Aqui estou usando um spr que peguei aqui no site então caso queira é só fazer download aqui. creditos ao ~Wolfeh.
Obs²: neste SPR alterei o nome que estava Tobi_Mask.spr/act para item01 caso for usar este item altere para item01 tudo se não vai dar erro mantendo ¿©_ / ³²_ ou altere os AgeisName
{
Id: 40000 //ID Do seu custom Item
AegisName: "item01"
Name: "Tobi Mask"
Type: 5
Buy: 20
Weight: 40
Atk: 20
Def: 20
Slots: 2
Job: 0xFFFFFFFE
Loc: 769
EquipLv: 1
View: 4500 //ID DO SPRITE
},
Agora vamos para pasta do seu RO e vamos na pasta data
Pasta - >> data\sprite\¾ÆÀÌÅÛ
item01.spr // mesmo nome do AegisName colocado no item_db2.conf
item01.act // mesmo nome do AegisName colocado no item_db2.conf
Pasta - >> data\sprite\¾Ç¼¼»ç¸® // Existem duas pasta ³² para masculino e ¿© para Feminino.
Pasta - >> ³²
³²_item01.spr
³²_item01.act
Pasta - >> ¿©
¿©_item01.spr
¿©_item01.act
Pasta - texture\À¯ÀúÀÎÅÍÆäÀ̽º // Existem duas pasta caso contrario crie 1 - Item e a 2 - collection
item - item01.bmp //icone do item mostrado no jogo
collection - item01.bmp //foto do item que mostra com a descrição
feito isso vamos para data\luafiles514\lua files\datainfo
1 - Abra o accessoryid.lub e adicione na ultima linha antes do } conforme esta á baixo.// Aqui estou usando o note++
ACCESSORY_C_Luna_On_Shoulder = 1881, //IMPORTANTE FECHE A VIRGULA SE NÃO DAR ERRO.
-- Custom Item
ACCESSORY_item01 = 4500, // aqui coloque o ID que colocou no item_db2.conf caso usou esse memso numero deixe esse
// A ULTIMA LINHA NÃO PRECISA COLOCAR MAIS SE QUISER PODE POR.
}
2 - Abra o accname.lub e adcione. // Lembrando que tem que ser antes do "}" conforme abaixo,
[ACCESSORY_IDs.ACCESSORY_C_Luna_On_Shoulder] = "_C_Luna_On_Shoulder",
-- Custom Itens
[ACCESSORY_IDs.ACCESSORY_item01] = "_item01",
}
3 - Agora ultima etapa vá para a pasta SEURO\System e abra itemInfo_Sak.lub (o mesmo nome, que colocou no nemo)
Procure "function main()" vai estar +- assim:
}
function main()
for ItemID, DESC in pairs(tbl) do
result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum)
if not msg then
result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum, DESC.costume)
end
Antes do } adicione:
[40000] = {
unidentifiedDisplayName = "Tobi Mask",
unidentifiedResourceName = "item01",
unidentifiedDescriptionName = {
"Item desconhecido, voce precisa identificar usando a ^6666CCLupa^000000."
},
identifiedDisplayName = "Tobi Mask",
identifiedResourceName = "item01",
identifiedDescriptionName = {
"Uma mascara laranja com desenho espiral e um orificio para o olho direito.",
"Ataque :^777777 20^000000",
"Defesa :^0000FF 20^000000",
"Equipped on :^777777 Upper, Mid, Lower^000000",
"Weight :^009900 40^000000",
"Applicable Job :^777777 Every Job^000000",
"Spriter :^777777 Wolfeh^000000",
"Level Requirement:^009900 1^000000",
"Jobs:^6666CC All except Novice^000000"
},
slotCount = 2,
ClassNum = 4500,
costume = false
},
ficando parecido com isso :
[40000] = {
unidentifiedDisplayName = "Tobi Mask",
unidentifiedResourceName = "item01",
unidentifiedDescriptionName = {
"Item desconhecido, voce precisa identificar usando a ^6666CCLupa^000000."
},
identifiedDisplayName = "Tobi Mask",
identifiedResourceName = "item01",
identifiedDescriptionName = {
"Uma mascara laranja com desenho espiral e um orificio para o olho direito.",
"Ataque :^777777 20^000000",
"Defesa :^0000FF 20^000000",
"Equipped on :^777777 Upper, Mid, Lower^000000",
"Weight :^009900 40^000000",
"Applicable Job :^777777 Every Job^000000",
"Spriter :^777777 Wolfeh^000000",
"Level Requirement:^009900 1^000000",
"Jobs:^6666CC All except Novice^000000"
},
slotCount = 2,
ClassNum = 4500,
costume = false
},
}
function main()
for ItemID, DESC in pairs(tbl) do
result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum)
if not msg then
result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum, DESC.costume)
end
if not result then
return false, msg
end
for k, v in pairs(DESC.unidentifiedDescriptionName) do
result, msg = AddItemUnidentifiedDesc(ItemID, v)
if not result then
return false, msg
end
end
for k, v in pairs(DESC.identifiedDescriptionName) do
result, msg = AddItemIdentifiedDesc(ItemID, v)
if not result then
return false, msg
end
end
if nil ~= DESC.EffectID and nil ~= AddItemEffectInfo then
result, msg = AddItemEffectInfo(ItemID, DESC.EffectID)
if not result then
return false, msg
end
end
if nil ~= DESC.costume and nil ~= AddItemIsCostume then
result, msg = AddItemIsCostume(ItemID, DESC.costume)
if not result then
return false, msg
end
end
end
return true, "good"
end
function main_server()
for ItemID, DESC in pairs(tbl) do
result, msg = AddItem(ItemID, DESC.identifiedDisplayName, DESC.slotCount)
if not result then
return false, msg
end
end
return true, "good"
end
Abra seu servidor, e logue nele crie o item e teste.
Considerações:
Resolvi fazer esse guia pois não achei nenhum atualizado e faltava informações ( como a parte do nemo eu mesmo nunca tinha visto um guia sitando para ativar esse viewID)
a maioria dos tutorial que via, ou pasta de exemplos sempre mandava adicionar em outros arquivos como idnum e etc e no caso do cliente novo não precisa.
espero que este guia ajude.