Ajuda - Busca - Membros - Calendário
Versão Completa: Proposta aos usuários.
Uêba !! > Games > MyT > Scripters Paradise

 
Galthar, O Errante
A MyT conta com um sistema de criação de itens que dispensa o comando makeitem e que tem várias opções como animação, dificuldade, tempo, som, materiais, requizitos, ferramentas e outros.
No entanto, este sistema foi elaborado por partes, conforme faziamos cada skill. O que fez com que cada skill tivesse uma versão diferente do sistema.
No inicio do ano, comessei a modelar e programar um sistema de criação de itens mais completo e arrojado, que substituiria todos os antigos e unificaria o sistema de fazer itens. Mas por virtude dos meus estudos e aumento da carga de trabalho tive que arquivar o projeto.
Como o script seria muito extenso OU muito complexo para ser feito no meu pouco tempu útil, convido aqui nossos usuários - sobretudo Criador de Mundos, Areaglar, Lauremir e lipedal - para um trabalho conjunto, de fonte aberta para qualquer um que se interessar.

Representado aqui como tags (versão antiga) listo o que poderá ser modificado e implementado para controle do sistema:
QUOTE

//////////////////////////////////////////////////////////////////////////////
////////////////NOVO SISTEMA GERAL DE CRIAÇÃO DE ITENS////////////////////////
//////////////////////////////////////////////////////////////////////////////
//tag.dif=dificuldade de 1 a 1000
//tag.delay=tempo de demora (segundos)
//tag.name nome do item que será criado
//tag.id id do item que será criado
//tag.mat1n nome do resource 1
//tag.mat2n nome do resource 2
//tag.mat3n nome do resource 3
//tag.mat4n nome do resource 4
//tag.mat1q quantidade do resource 1
//tag.mat2q quantidade do resource 2
//tag.mat3q quantidade do resource 3
//tag.mat4q quantidade do resource 4
//tag.mat1i ID do resource 1
//tag.mat2i ID do resource 2
//tag.mat3i ID do resource 3
//tag.mat4i ID do resource 4
//tag.needi ID de uma material que não gasta, mas precisa estar na bag
//tag.needn nome de uma material que não gasta, mas precisa estar na bag
//tag.targt type de um item que precisa ser clicado
//tag.targi id de um item q precisa ser clicado
//tag.targn nome de um item q precisa ser clicado
//tag.anim animação que faz a cada segundo
//tag.sound som q faz a cada segundo
//tag.emote emote que PODE fazer a cada segundo
//tag.emotefim emote que faz quando acaba
//tag.more1l more1l do item a ser criado
//tag.more1h more1h do item a ser criado
//tag.more1 more1 do item a ser criado
//tag.more2 more2 do item a ser criado
//tag.amount amount do item a ser criado
//tag.color cor do item a ser criado
//tag.repeat quantidade de fezes que será tentado (0 ou 1 para 1)


Os interessados que se manifestem.
nerd
Tô afim de ajudar, mas primeiro tenho que me acalmar na escola, tô com mais ou menos uns 3 trabalhos e 2 provas por dia, mais a p*rra da catequese, natação, violino, aula à tarde nas segundas e tal. Tô nem conseguindo raciocinar direito (Galthar pode comprovar...), e além disso nem entendi direito o que que c tah convidando a gnt pa fz, pq a minha mãe tá no telefone ("Ah é? E o zé? Aham! Sim, sim, claro!!! E a Marga? Aham! Sim!") e eu mal consegui ler oq c escreveu...

Resumindo, foi uma convocação pra transformar todos os scripts de makeitem antigos num sistema novo? É isso? Vou tentar ajudar sim, mas essa semana tá impossível, vão comentando ae q dae eu tento me ligar no que que é pa fz exatamente. hein2k3.gif
Criador de Mundos
Pode contar com a minha participação. hein2k0.gif

Eu também não entendi muito bem o que é pra fazer. É um script q cria itens nesse padrão ou um padrão q todo item tem q ter para ser criado?

Infelizmente eu também não disponho de muito tempo livre, mas eu aposto q se formarmos uma equipe boa e se nos organizarmos direitinho dá pra desenvolver isso rápido e sem problemas.
lauremir
É o script de criação de itens do myt... Ele cria uma tag pra cada item, e cada tag checa skill, faz o delay e coisas assim... Tem um exemplo aqui.
Pra saber como é a falha, olhem no tópico do Galthar pra criação de menus inteligentes...

E falta uma pá de coisas... Tipo os itens que servirão de resource, como pregos, os itens a serem criados (BS, por exemplo, precisa do nome do ores)...
Galthar, O Errante
Vou dar um exemplo de funcionalidade para ver se vocês entedem melhor.
Digamos que eu quero fazer um script que cria uma armadura de ouro, com diamantes, que use martelo, bigorna, diamantes, placas de ouro...
Primeiro vamos as placas de ouro:
CODE

var.mat1n=barra de ouro
var.mat1q=2
var.mat1i=0f123
var.dif=300
var.delay=4
var.name=placa de ouro
var.more2=47952 //para nada. Só pra explicar.
var.id=0f567
var.anim=19
var.som=19
var.needi=i_martelo
var.needn=martelo
var.targt=t_forge
var.targn=forja
src.fazitem //SEMPRE o ultimo

A função fazitem vai ler todos estes dados e criar todos os efeitos para que:
Gaste 2 barras de ouro
Dificuldade 30.0
Demore 4 segundos (a cada segundo faz o som 19 e a animação 19)
Quando o item estiver completo, ele vai se chamar placa de ouro, vai ter seu more2 = 47952, id é 0f567 and so on...
Se vocês entenderam, agora esbocem o proximo script pra transformar placas de ouro e diamantes na armadura.
(Tô esperando vcs postarem pra mim continuar a explicação).
lauremir
CODE
var.mat1i=i_placa_de_ouro
var.mat1n=placas de ouro
var.mat1q=5
var.dif=500
var.delay=20
var.nome=Armadura de Placas
var.id=i_armadura_de_placas
var.needi=i_martelo
var.needn=Martelo
var.targt=t_anvil
var.targn=anvil
var.skillu=blacksmithing //coloquei pra poder usar uma function só pra todas as skills
src.fazitem


Não seria melhor se fossem tags? As variáveis needi, needn, targt e targn seriam usadas no SKILLMENU, pra ver se o item aparece ou não...

CODE
[function fazitem]
if !(<restest> <var.mat1q> <var.mat1i>)
src.sysmessage= Voce nao tem <var.mat1q> <var.mat1n> na bag!
return 1
endif
cont.newitem=i_mry_fazitem
src.act.equip
src.act.use


CODE
[itemdef i_mry_fazitem]
NAME=Fazendo item
id=i_deed
type=t_equip_script
layer=30

ON=@Create
attr=08010
more2=<eval <var.delay>>

ON=@DCLick
cont.say *trabalhando*
timer=1
cont.consume <var.mat1q> <var.mat1i>
return 1

On=@timer
if (<more2> > 1)
cont.say *trabalhando*
more2 = (<more2>+(-1))
cont.falhar
timer=1
return 1
else
cont.say *terminou*
cont.newitem=<var.id>
cont..act.cont=cont.<findlayer(21).uid>
remove
return 1


CODE
[function falhar]
if ({1 <var.skillu>} < <var.dif>)
say *falhou*
consume 1 i_mry_fazitem
return 1
endif
Criador de Mundos
Pq em vez de checar VARs não checar ARGNs ?

fazItem( nomeDoItem, skillNecessario, materialNecessario1, ... )
lauremir
Boa ideía...
Galthar, O Errante
Boa obcervação da skill, Lau!
E escolhi var pq todas que eu fiz usam tag. Agora imagina que temos 35 jogadores logados e ele vai testar se UM cara tá com frio. Quantas tags o Sphere vai percorrer?
MUITAS! Isso gera lag.
Então a idéia é jogar tudo pra var e depois jogar todas as vars como tag da memory.
E Spectro, imagina vc ter que decorar a ordem de 37 argumentos pra fazer uma function...
Eu fiz isso com 8 e achei horrivel! E vai ter um monte de argumentos nulos no meio, entende? Imagina que a coisa todo pracisa de um tipo de material só, não precise clicar em nada e nem ter ferramenta nenhuma.
CODE
src.fazitem i_coisa, 0, 0, 0, aquilo, 0, 0, isso, 0...

Prefiro setar vars.
Vars são leves, pq agora tem um arquivo só pra elas.
Antes elas ficavam guardadas no worldfile, então geravam MUITO lag não só pra funções que tinham var como também pra ler o worldfile.
Mas agora que estão separadas, criaremos AO TOTAL 37 vars que são temporárias e serão apagadas assim que o item terminar.
Criador de Mundos
Eu acho que usando VARs pode ocorrer algum problema. Por exemplo, uma pessoa faz um item q utiliza 3 materiais

var.mat1n=barra_de_ferro
var.mat2n=madeira
var.mat2n=couro

e logo depois faz um item q utiliza apenas um material

var.mat1n=carne

como a função fazitem vai saber q var.mat2n e var.mat3n não devem ser lidos para fazer esse item atual?
Galthar, O Errante
E é pra isso que serve a função FAZITEM CLEARVAL.
CODE
if (strmatch(<args>,clearval))
var.mat1n=
var.mat2n=
...

Mas antes disso, as vars já teriam sido transportadas para TAGS no i_mry_fazitem, pq agora podems usar tags nos itens, o que não acontecia nos outros spheres.
lauremir
Blz? E agora? Já entendemos o sistema... O que é pra fazer?
Galthar, O Errante
1ª coisa que precisa ser rabiscada é a estrutura da função.
Eu sugiro isso:
CODE

- Menu com um item para teste (pode ser qq coisa).
- Checar se a skill do pc é maior que var.dif. Se não for, abortar e exibir menságem.
- Checar se tem material 1 (se não tiver exibe menságem)
- Se houver necessidade de material 2, checar (com menságem)
- Se houver necessidade de material 3, checar (com menságem)
- Se houver necessidade de material 4, checar (com menságem)
- Equipa a memory e transfere todos os vars como tags para a memory.
- Apaga todas as vars.
- Por timer=1 na memory.
- Sinalisar com um "src.say QQ COISA" no timer e dar um remove na memory.

Mais nada.
Vamos partir daí e então quando isso tiver pronto e sem bugs vamos adicionar mais ifs e efeitos.
Bom trabalho =-)
lauremir
Já comecei aqui, mas meu menu tá um tanto quanto estranho...
Galthar, O Errante
Ele deve ficar ± assim:
CODE
[MENU m_teste]
on=xxxx nome //xxxx é uma ID válida
testif (1==1)//depois agente põe algo
var.mat1n=isso
var.mat1i=xxxx
var.mat1q=2
var.mat2n=aquilo
var.mat2i=xxxx
var.mat2q=3
var.skillu=blacksmithing
var.dif=300
src.fazitem


acho que só por enquanto. Vamos colocando as coisas devagarinho se não fucka tudo.
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.