BA

Char Maker

Por BananaFight, 24 de mai. de 2013 em Clients

otserv
tibia
script
19
9.6k
BananaFightB
24 de maio de 2013 às 01:32

 

Esse Mod faz com que seja possível criar novos char na sua acc usando apenas o client.



OBS: Ele usa Opcode, e com isso só é possível criar char com um personagem online, Porem o sistema é foi totalmente feito para funcionar com um personagem off, então a menos que você consiga editar as source do server, só será possível criar novos personagens na conta com um char logado, Pois os opcodes só funcionam com um char logado.



 

Nome: Char MakerDescrição: Criado de charAutor: Eduardo Vicente (Banana Fight)Website: www.xtibia.com

 




newchar.png





Client Side



Client_Entergame/Entergame.lua



Procure por:



 

 if modules.game_things.isLoaded() thenprotocolLogin:login(G.host, G.port, G.account, G.password)

 



e embaixo adicione:



 

accountName = G.account

 



Client_Entergame/Characterlist.lua



procure por :



 

-- public functions[function CharacterList.init()connect(g_game, { onLoginError = onGameLoginError })connect(g_game, { onUpdateNeeded = onGameUpdateNeeded })connect(g_game, { onConnectionError = onGameConnectionError })connect(g_game, { onGameStart = CharacterList.destroyLoadBox })connect(g_game, { onLoginWait = onLoginWait })connect(g_game, { onGameEnd = CharacterList.showAgain })if G.characters thenCharacterList.create(G.characters, G.characterAccount)endend

 



E substitua por :



 

-- public functions[function CharacterList.init()connect(g_game, { onLoginError = onGameLoginError })connect(g_game, { onUpdateNeeded = onGameUpdateNeeded })connect(g_game, { onConnectionError = onGameConnectionError })connect(g_game, { onGameStart = CharacterList.destroyLoadBox })connect(g_game, { onLoginWait = onLoginWait })connect(g_game, { onGameEnd = CharacterList.showAgain })if G.characters thenCharacterList.create(G.characters, G.characterAccount)endnewChar = g_ui.displayUI('newchar')newChar:hide()endfunction sendAll()local msg = newChar:getChildById('msg')local name = newChar:getChildById('name'):getText()local sex = newChar:getChildById('sex'):getText()local voc = newChar:getChildById('vocation'):getText()local protocol = g_game.getProtocolGame()local sendSexlocal sendVocif sex == "male" thensendSex = 0elsesendSex = 1endif voc == "Sorcerer" thensendVoc = 1elseif voc == "Druid" thensendVoc = 2elseif voc == "Paladin" thensendVoc = 3elsesendVoc = 4endprotocol:sendExtendedOpcode(152, string.format("%s,%s,%d,%d", accountName, name, sendVoc, sendSex))msg:setColor("green")msg:setText("Character "..name.." Created")end

 



Agora Crie um arquivo com o nome newchar.lua, e adiciona isso dentro :



 

MainWindowid: characterCreator!text: tr('New Char')size: 210 250@onEnter: sendAll()Labelid: labelNametext: Choose your name:color: whitetext-auto-resize: trueanchors.top: parent.topanchors.left: parent.leftmargin-top: 2TextEditid: nameanchors.left: parent.leftanchors.right: parent.rightanchors.top: prev.bottommargin-top: 5Labelid: labelSextext: Chose your sextext-auto-resize: truecolor: whiteanchors.left: parent.leftanchors.top: name.bottommargin-top: 10ComboBoxid: sexanchors.left: parent.leftanchors.top: labelSex.bottommargin-top: 5width: 75options:- Male- FemaleLabelid: labelVocationtext: Chose your vocationtext-auto-resize: truecolor: whiteanchors.left: parent.leftanchors.top: sex.bottommargin-top: 10ComboBoxid: vocationanchors.left: parent.leftanchors.top: labelVocation.bottommargin-top: 5width: 100options:- Knight- Paladin- Sorcerer- DruidLabelid: msgtext-auto-resize: trueanchors.left: parent.leftanchors.top: vocation.bottommargin-top: 20Buttonid: creatChartext: Creat Charactercolor: whiteanchors.left: parent.leftanchors.bottom: parent.bottom@onClick: sendAll()Buttonid: canceltext: Cancelcolor: whiteanchors.left: creatChar.rightanchors.right: parent.rightanchors.bottom: parent.bottommargin-left: 10@onClick: newChar:hide()

 



E no chartacterlist.otui, lá no final você apaga os 2 botões de "cancel" e "ok" e substituto por estes :



 

 Buttonid: newChartext: New Charwidth: 64anchors.left: parent.leftanchors.bottom: parent.bottom@onClick: newChar:show()Buttonid: buttonOk!text: tr('Ok')width: 64anchors.left: newChar.rightanchors.right: buttonCancel.leftanchors.bottom: parent.bottommargin-right: 10margin-left: 10@onClick: CharacterList.doLogin()Buttonid: buttonCancel!text: tr('Cancel')width: 64anchors.right: parent.rightanchors.bottom: parent.bottom@onClick: CharacterList.hide(true)

 



Server Side



Data/Creaturescritps/scripts

crie um arquivo chamado exetendedopcode.lua, e adicione isso dentro :



 

local QUERY = "INSERT INTO `players` VALUES (NULL, '%s', 0, 1, %d, 1, %d, 150, 150, 0, 0, 0, 0, 0, 221, 0, 0, 50, 50, 0, 0, 1, 95, 127, 7, 0, 400, %d, 0, 0, 1, 0, 0, 0, '', 0, 0, 0, 151200000, 2, 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, '');"NEW_ACCOUNT_CHAR = 152function onExtendedOpcode(cid, opcode, buffer)if opcode == NEW_ACCOUNT_CHAR thenlocal info = string.explode(buffer, ",")for a = 1, #info doif tonumber(info[a]) theninfo[a] = tonumber(info[a])endenddb.executeQuery(string.format(QUERY, info[2], getAccountIdByAccount(info[1]), info[3], info[4]))endreturn trueend

 



E dentro do creaturescripts.xml adicione :


<event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/>




O sistema ainda não esta 100% completo, falta a parte que envia uma mensagem de erro quando o char não é criado, Porem eu não irei atualizar esse sistema pelo fato de só funcionar com char online.

Editado Abril 13 por Bennyyw

AlexandreKGA
24 de maio de 2013 às 08:55

Caraca que legal hein!

 

Parabéns, obrigado por compartilhar.

StyloMaldosoS
24 de maio de 2013 às 09:27

Caraca que interessante, daría pra faze no modo Gambiarra para o PDA? :)

BananaFightB
24 de maio de 2013 às 13:11

@StyloMaldoso, você poderia fazer de um modo que quando clicasse em New Char, ele executasse uma talkactions com as infos que foram escolhidas.

 

 

@All, Pessoal, sei que estou um pouco ausente do fórum, e por isso quando eu trazer algo para o fórum irei tentar trazer algo que não foi visto ainda para mostrar as incríveis possibilidades que o OtClient nos oferece.

 

E obrigado pelo apoio de todos vocês.

Editado Maio 24 por BananaFight

AlexclusiveA
24 de maio de 2013 às 18:00

Muito bom Edu. Como já falaram, sempre trazendo coisas boas!

Parabéns!

FaelzdanilF
25 de maio de 2013 às 23:17

E dentro do creaturescripts.lua adicione :

 

<event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/>

 

 

Corrigindo que é na creaturescripts.xml !

Editado Maio 25 por Faelzdanil

BananaFightB
25 de maio de 2013 às 23:23

Pronto, corrigido, e desculpem pelo erro.

manoelnetoM
25 de maio de 2013 às 23:26

Boa Banana, estava sentindo falta desses seus posts, eu nunca tinha imaginado que poderia ter algo assim no Otc, sua ideia é muito boa.

 

Andei pensando em fazer uma janela de Guild, que nem tem naqueles MMORPGS mostrando membro, level e outras coisas, difícil é saber como proceder e_e

BananaFightB
31 de maio de 2013 às 21:35

Pessoal pesso desculpas, mais tinha esquecido de uma parte então para que não aja bugs arrume em, Entergame.lua

 

Procure por:

 

  if modules.game_things.isLoaded() then
	protocolLogin:login(G.host, G.port, G.account, G.password)

 

e embaixo adicione:

 

accountName = G.account

Editado Maio 31 por BananaFight

1 mês depois...
saviomuS
22 de junho de 2013 às 22:55

Ola teria como por para mudar outifit tambem?

planetcP
26 de junho de 2013 às 15:48

tem como postar os arquivos

Client_Entergame/Entergame.lua

Client_Entergame/Characterlist.lua

?

pois nao estou conseguindo :S fiz certinho mas n ta adiantando. vlw!

1 mês depois...
xS0NYxX
17 de julho de 2013 às 13:47

O que precisa editar nas sources pra colocar pra criar char off?

31452883
17 de julho de 2013 às 14:18

vc teria que criar um socket no cliente para conectar no servidor no inicio da aplicação (ao abrir o cliente), ao contrário do mod, que conecta no servidor ao logar o char.

 

Um package no servidor também, para receber os bits enviados do cliente em tempo constante e, executar a função de forma interna (ou até mesmo por scripts) se manjar um teco de programação

2 semanas depois...
30 de julho de 2013 às 04:10

Parabéns cara isso vai ajudar muito no meu projeto de narutibia.

 

rep+

2 meses depois...
GODMedievalG
23 de setembro de 2013 às 16:48

Nossa cara muito massa isso ae, realmente esse "OTClient" tá revolucionando o mundo dos Ots e a cada dia tá me surpreendendo, não só a mim né, tem mias um monte de gente que tenho certeza que tá gostando muito dele !

 

Obrigado por compartilhar, Muito Obrigado!