Capítulo 2: Objetos Tipo Item, Criando Itens. |
Capítulo 2: Objetos Tipo Item, Criando Itens. |
Apr 22 2004, 10:16 PM
Post
#1
|
|||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
Não.. esse capítulo não tem por objetivo trocar cores de robes, nem mudar danos de armas. Vamso animar itens, criar scripts complexos de contrução de itens e tudo mais. PARTE I - Layers Os personágens tem Layers (camadas) onde objetos diferentes são colocados. Por exemplo, spellbook, armas de uma mão e essas coisas vão para a layer 1. Scripts de 'veneno' vão para a layer 42. Sua backpack fica SEMPRE na layer 21. Quando você dá dclick num objeto equipável, ele procura a layer onde ele deve ficar e vai pra lá. Então eaparece o GUMP dele no seu Paperdol (alt+p é paperdoll) Vamos pega o mesmo exemplo para todos os ítens. i_sword_long:
Quando vc der dclick nela, ela VAI pra leyer 1. Você não pode alterar o GUMP dela no paperdoll (apenas por edição de multi). -------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||
|
|
|||
![]() |
Apr 22 2004, 11:05 PM
Post
#2
|
|||||||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
PARTE 2: Sections [ITEMDEF xxx] comentadas. A Section [ITEMDEF xxx] é um objeto de script do tipo ITEM. Ele é existente do mundo o jogo (seja visível ou não). pode ser um canhão, uma arma, uma linha de costura, uma pedra, um portal ou o cú que seja. Nunca um NPC ou um jogador. Cuidado! Existem objetos que tem cara de item, cheiro de item, id de item mas não são itens. Você não pode move-los ou mesmo remove-los. São ITENS mas não estão no WORLDFILE* do seu Sphere e sim no SATICS0.MUL. As arvores por exemplo... Voce pode tentar remover uma árvoe, mas não vai conseguir. Só editando o mul você pode fazer isso. Os criadores do Sphere acharam melhor por os ITEMDEFs com nomes da ID do item. Por isso que a espada se chama 0f60. 0f60 é o código da PIC da espada (conhecido como ID). Quer ver? Baixe e intale o InsideUO. Você vai usa-lo muitas vezes. Configure-o direitinho se não não abre. Na parte de ArtWork e na guia Static Tiles, procure o 0f60. BINGO! Desenhinho da Longsword! Não é bom você criar ITEMDEFs com números como nome. Isso fará o antigo ITEMDEF ser sobrescrito quando o Sphere abre. (ele vai continuar no aquivo .scp dele bonitinho, mas se vc der um .add nele, virá o novo). A maioria dos scriptsrs (todos que eu conheço) colocam o DEFNAME como nome do ITEMDEF. Isso quer dizer que, se você for fazer um item, ponha a ITEMDEF da seguinte maneira: [ITEMDEF i_espada_justiceira] Vamos para o ITEMDEF comentado:
--====Cabeçalho====-- DEFNAME=i_sword_long: Defname tem o mesmo sentido da [SKILL X] que já falamos. Para adicionar a espada lonfa no mundo diga .add i_sword_long. Para criar uma via script é assim: SRC.NEWITEM=i_sword_long SRC.ACT.BOUNCE NAME=Longsword: Não foicolocada neste script, pois a ID 0f60 já tem um nome Hard Codded. Mas você pode por. RESOURCES=12 i_ingot_iron: Quando o jogador utilizar o Blacksmithing para criar este item (somente pelo sistema de BS Hard Codded), ele vai antes testar pra ver se o jogador (SRC) tem 12 ingots de ferro e ao fazer a espada, vai consumir isso da backpack (layer 21) do jogador. TYPE=T_WEAPON_SWORD: TYPE é legal. TYPE é o comportamento de script que o item tem. É no TYPE que esta guardado que qunado der dclick vai equipar e chamar a skill LUMBERJACKING (pra tirar kindling das árvores), que fica um comando que diz que na luta, vai dar dano, fica que quando ela fica velha se quebra e essas coisas. O SPhere tem MUITAS Types. Mas vc tb pode fazer as suas =-) Para se aprofundar nos TYPEs, visite o compêndio de SPhere 0.55 do Taran. Nos vamos se aprofundar neles mais pra frente. LAYER=1: Já falei. DAM=5,33: Quando o CONT acertar um golpe, vai dar um dano entre 5 e 33 (só funcina pra TYPE=t_weapon_*) SKILL=Swordsmanship: É a skill que ele vai testar para tentar dar o golpe (só funcina pra TYPE=t_weapon_*) REQSTR=25: Se o SRC não tiver 25 ou mais de STR, não pode equipar. Vai pra bag. TWOHANDS=N: Se o TWOHANDS for igual a Y (ou 1), você não pode equipar nada na mão esquerda (layer 2) se equipar este. Não fica nada na layer 2, mas ele não deixa equipar nada se este item for de duas mãos. WEIGHT=7: Peso (em stones) que tem este item. Se ele estiver em qualquer layer do personagem, mesmo na backpack (layer 21), este peso será somado no peso total do char, aumentando o rete de perda de stamina e se o peso total do char passar de um certo número, ele não pode se mover ou pegar mais qualquer coisa. CATEGORY=Provisions - Weapons SUBSECTION=Swords DESCRIPTION=Longsword Para referência do Axis. Procure no axis a categoria, subseção e descrição dele. SKILLMAKE=BLACKSMITHING 53.8: Para fazer este item, é tastada a perícia Blacksmithing. Ele rola um número entre 1 e a sua skill Blacksmithing. Se este número for MAIOR que 53.8, você tem sucesso. DUPELIST=0f61: Coisinha do mau Isso afirma que existe um outro item de ID=0f61 que possui as exatas mesmas características deste aqui. Mas para isso ser efetivado, você precisa criar um ITEMDEF como este a seguir:
--====Trigges====-- ON=@Create: Quando este item for criado, o sphere executa linha por linha o script abaixo. No nosso caso: HITPOINTS={31 110} É o tanto de pancada que este item aguenta em combate. Se você quer fazer uma espada com nome e cor diferente, o @Create é o trigger certo.
TODOS OS ITEMDEFs tem os seguintes Triggers: @Create @Death @TIMER @DClick @Click @Pickup @Step (não só quando vc pisa, mas a cada segundo q vc está em cima) @DropOn_Item (quando você jogar em cima de outro item) @DropOn_Char @DropOn_Self (quando você jogar em cima de vc ou no seu paperdoll) ITEMDEFs de t_weapon_* tem mais esses: @GetHit (quando a arma toma um dano) @HitTry (quando o dono da arma tenta bater em alguém, antes de fazer testes e rolar danos) @HitMiss (quando o dono erra) @Hit (quando o dono acerta) *WORLDFILE: Arquivo sphereworld.scp que fica na pasta SAVE. Nele consta todos os itens que tem no mundo e são dinâmicos como objeto de script. -------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||||||
|
|
|||||||
Apr 22 2004, 11:54 PM
Post
#3
|
|||||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
Parte 3 - Brincado com itens Chega de blablabla, né caramba! Vamos botar pra rodar! Vamos fazer uma espada, transparente, que dê um dano generoso, mas que quando bate, faz uns efeitos visuais legais. Primeiro vamos cuidar dos efeitos visuais. Vamos criar um objeto tipo item, que parece uma coluna de fogo, mas é transparente e quando você pisa toma um dano bacana.
Lindio! Agora vamos para a espada:
Cabeçalho e crete beleza mas... CONT? <SRC.P>??? JC responde: CONT não é o container? o container dele não é o Player? (É SIM! tá dentro do player!) CONT.NEWITEM i_fogo_sagrado: Jogador, produza um Fogo do bem. Onde vai por o fogo do bem? Ele já existe, mas não esta no mapa. Pod procurar ae q ele não tá nomapa, mas eu asseguro que ele existe. Mas pq o CONT tem q criar o item? Porque só CHARS (NPCs ou PCs) podem criar itens. Itens não podem criar itens. Agora vem o detalhe: No trigger @Hit, o SRC não é o jogador... No trigger @Hit, o SRC é a FONTE do hit. o ALVO. SRC agora é o cara que tá apanhando! Prosseguindo... CONT.NEW.P=<SRC.P>: Jogador, pegue o fogo do bem e ponha a posição dele = a posição do cara que tá apanhamdo. Tá, e porque os <>??? Wel... Voltando ao primário: PRIMEIRO MEMBRO: CONT.NEW.P SEGUNDO MEMBRO: <SRC.P> Prosseguindo... CONT.NEW.ATTR=012 ATTR= Atributos. Abra o Axis e vá na guia Item Tweak. Selecione os Attributes Decay e Never Movable. Olha lá!!! Apareceu um 0012! Decay: Quando o timer dele chegar a zero, ele some Never Movable: Ninguém (exceto GMs) pode tirar ele do lugar. CONT.NEW.TIMER=3 Em 3 segundo ele vai dar Decay (a menos que tenha um @Timer dizendo o contrário). Agora vai brinca, muleke! E se não funcionou, fassa funcionar! -------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||||
|
|
|||||
Apr 25 2004, 10:11 PM
Post
#4
|
|||||||||||||||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
Capitulo II - Objetos tipo Item (Parte 4) Triggers Trigger do inglês é GATILHO. Objetos diferentes podem ter triggers diferentes (ou iguais em alguns casos). Um Trigger é uma parte de script que determina como o objeto se comportará em uma dada situação. O que acontece se arrastarmos ele, o que acontece se clicarmos nele, o que acontece se dermos um duplo click nele... ITEMs e seus Triggers Uma SECTION [ITEMDEF xxx] é composta por: ITEMDEF Cabeçalho Triggers ITEMDEF é o só a linha que chama a section. Cabeçalho é a parte onde agente põe a ID inicial, o Nome, o TYPE, o DAM (dano das armas), a layer (de itens quipaveis) e mais algumas coisas que não cabe citar aqui. Triggers é a parte FUNCIONAL do ITEM. É como vamos scriptar o comportamento do item. Algumas vezes, os Triggers são dispenssaveis, pois estão compilados em um script puro que atribuimos ao item. Este script puro é o TYPE. Olhe qualquer script de arma. Como o Sphere sabe que ele tem que dar um dano igual ao DAM? E como o Sphere sabe que ele é equipado na Layer 1? Esta linha nos garante isso:
Existe, hard codded, uma section dentro do SphereSrv.exe que tem todos os triggers desta Type. Você pode adiocionar mais triggers se quiser, ou barrar as Hard Codded. Este 'curso' é voltado para a parte de BARRAR os triggers Hard Codded e criar novos, dando ao UO uma jogabilidade diferente da OSI. Explicando os Triggers dos ITEMs. on=@DClick Após este trigger, você põe o que quer que acontessa quando alguem dar um duplo click no item. OBJETOS: <nada> ou I: retorna como objeto o próprio item. SRC: Quem clicou.
Engraçado... on=@Click Após este trigger, você põe o que quer que acontessa quando alguem dar um click simples no item. De fábrica, todos os itens ao ser clicados mostram seu nome para quem clicou. Dar um RETURN 1 no final deste trigger significa que ele não vai mostrar su nome (pelo menos não pelo SCP Hard Codded) OBJETOS: <nada> ou I: O próprio item SRC: quem clicou
Aqui eu dei um geito de mostraro nome dele e uma mensagem a mais, quando você clica uma vez só nele. MESSAGE seria um SAY particular. Ninguém, alem do SRC vai ver esta mensagem. on=@TIMER MUUUUITO importante! Você sempre pode atribuir um CRONÔMETRO interno a um ITEM. É o nosso uqerido, amado e idolatrado TIMER. Assim que este timer chegar a 0, o trigger @Timer vai disparar. OBJETOS: @Timer não tem SRC. SRC=Source. Então quem é a fonte do timer? Quem fez ele chegar a 0? Não tem lógica certo. Só pra não esquecer... Errr... @Timer não tem SRC. <nada> ou I: O próprio Item SRC: Hey, cara chato! Já falei que @timer Não Tem SRC caramba! Eu sei que você vai cair nessa, eu sei, EU SEI! Quer afetar o jogador??? Se isto for uma memory ou qq objeto equipado, use CONT! Se não linque o ITEM como jogador e comande o LINK! NOTA: Todos se ferram com uma coisa que ainda não comentei. @TImer não tem SRC, tá? Os scripters inesperientes sempre tentam colocar um SCRzinho no @Timer, mas não funciona. @Timer não tem SRC.
on=@Step Interessante... O que acontesse se PISARMOS no item? BOOM??? Ele quebra? O cara que pisou fica envenenado? Hum... OBJETOS: SRC: Quem pisou <nada> ou I: Ela mesma
on=@Create Esse trigger dispara quando o ítem for criado. Não tem objetos a não ser ele mesmo (I ou <nada>)
(já comentei o caso de que @Timer não tem SRC?) ON=@DAMAGE Isso quer dizer que o ITEM perdeu HITPOINTS. Não são todos os itens que tem HITPOINTS, então não adianta por este trigger num portal ou numa porta. (a manos que você fassa um scripte que derrube portas). Isso é mais pra armas, roupas e armaduras... OBJETOS: SRC: Quem provocou o dano
-------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||||||||||||||
|
|
|||||||||||||||
Apr 25 2004, 11:16 PM
Post
#5
|
|||||||||||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
ON=@Destroy Esse aqui dispara quando o item for removido do Worldfile. Fassa o que quizer com isso. Acho que eu nunca usei esse trigger. O interessante é o obvio. Se você retornar 1, ela não some =-) OBJETOS: <nada> ou I: Ela mesma
ON=@DROPON_CHAR Isso dispara quando você tenta arrastar este item para alguem. OBJETOS: SRC: CHAR no qual você esta arrantando o ITEM. <nada> ou I: Ela mesma.
ON=@DROPON_GROUND O que acontece se jogarmos ela no chão??? OBJETOS: <nada> ou I: Ela mesma
ON=@EQUIP É o que acontesse quando equipamos o item. Hard codded, ela passa a ocupar a LAYER que o cabeçalho ou o TYPE aponta. OBJETOS: SRC: Quem está equipando <nada> ou I: Ela mesma Retornar 1 faz ela não ser equipada.
on=@UNEQUIP Dispenso maiores comentários, né??? Retornar 1 faz ela continuar equipada.
-------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||||||||||
|
|
|||||||||||
Apr 25 2004, 11:26 PM
Post
#6
|
|||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
on=@Dropon_Item Igual o @Dropon_Char, mas serve pra itens. OBJETOS: <nada> o I: Ela mesma SRC: Quem esta arrastando ela. SRC.ATC: O objeto q vc esta tentando jogar ela.
ON=@PICKUP_GROUND Quando você pega ela do chão. OBJETOS: SRC: Quem está pegando <nada> ou I: Ela mesma CURIOSIDADE: Sabia que on=@Timer não tem SRC? ON=@PICKUP_PACK Quando você pega ela da sua Backback. OBJETOS: SRC: Quem está pegando <nada> ou I: Ela mesma ON=@TARGON_CHAR; ON=@TARGON_GROUND; ON=@TARGON_ITEM São uma outra história. ANTEÇÃO!!! ON=@TIMER NÃÃÃÃÃÃÃO TEEEEEEEEMMM SRC!!! -------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||
|
|
|||
Apr 26 2004, 07:03 AM
Post
#7
|
|||||
|
Minhauuu!!! Grupo: Members Posts: 2660 Registrado: 30/04/2002 De: São Paulo, Cidade Rock 'n' Roll Membro N°: 500 |
Capitulo II - Objetos tipo Item (Parte 5) Targs e @Targon_* Vou criar um script de modelo para explicar o funcionamento dos TARGS. Uma coisa importante que eu já disse mas vale a pena ser repetida, é que só objetos tipo ITEM podem @Targon_*. Não ponha em DIALOGs, MENUs, FUNCTIONs e etc. Vamos criar uma zarabatana, dardos e vamos fazer o cara jogar setinhas venenosas.
Comentando o @Dropon_Item. Eu preciso de uma variável para guardar o estado da zarabatana para saber se ela já foi carregada ou não. Todo o item tem uma variável chamada more1, que dependendo do TYPE tem um uso diferente. Mas como estou fazendo um item que não tem script Hard Codded (t_script) eu posso usar o more1 pra qualquer coisa que eu quizer. Então, se a zarabatana tiver more1=1, ela está carregada. Se ela tiver more1=0, ela está descarregada. if (<src.act.BaseID>==i_zarabatana) Se o objeto que estou arrastando a seta for uma zarabatana, esta linha segue para a proxima linha. Se não for uma zarabatana, o script continua a correr a partir do ultimo ENDIF. if (<src.act.more1>==1) Se a variável more1 da zarabatana estiver em 1, corre a proxima linha. Caso contrário, vai para o ELSE deste bloco de IF (se não tivesse ELSE aqui, ele correria para o ENDIF). src.sysmessage Esta zarabatana ja esta carregada. return 1 O SRC (jogador) vai receber uma mensagem cinza no canto inferior esquerdo da tela dizendo 'Esta zarabatana ja esta carregada.' Depois vai fingir que nada aconteceu e parar o script (return 1) else if (<amount>==1) remove else amount=<amount>-1 update endif src.act.more1=1 Caso o nosso ultimo IF tenha falahado, ele vai executar as linhas entre o ELSE e o ENDIF deste bloco de IF. Isso fará o jogador consumir uma seta venenosa e fazer com que o more1 da zarabatana fique 1. Este tipo de script consome a seta em QUALQUER LUGAR. Mesmo se ele estiver usando a seta no chão. É diferente do 'SRC.CONSUME 1 i_dardo_venenoso' que só consumiria o dardo se estivesse na backpack. A partir deste momento, se tentarmos colocar outra seta, ele vai dizer que a zarabatana já está carregada. endif endif Fecha os dois blocos de IF.
O entendimento deste fica pra lição de casa Outras dúvidas vão surgir com este script. Conforme as duvidas aparecerem nos outros tópicos, vou esclarecendo e explicando melhor aqui. -------------------- "Com toda esta polêmica a propósito da clonagem, uma grande pergunta urge colocar:
Alguém que tenha relações sexuais com o seu próprio clone, é homossexual, está a masturbar-se ou se fudeu?" Diga não às Drogas! |
||||
|
|
|||||
![]() ![]() |
| Versão Simples | Horário: 23rd May 2013 - 05:47 PM |