[Consulta] [Android] Programando YUGIOH Efecto de Cartas

Iniciado por s00rk, 20 Junio 2012, 03:50 AM

0 Miembros y 1 Visitante están viendo este tema.

s00rk

Bueno pues hago este tema ya que estoy estancado en una parte en el codigo que es en los efectos de monstruos y cartas(Esto claro lo entenderan ls que sabn del juego hehe), puesto que lo que hago es obtener los datos de todas las cartas desde http://www.yugiohcardguide.com/card_list.html en donde no tengo ningun problema haciendo simples parse y obtienendos los datos tales como nombre del deck, nombre de la carta, tipo, atributo y demas, el problema viene cuando son cartas de efecto, puesto que por ahora no se me ocurre nada para poderlo hacer automatizado (no quiero andar programandole cada efecto a cada carta -.-, o eso es lo que trato de lograr) y ahi puedo leer el efecto pero imposible poder desde el texto de la carta saber lo que hara hehe, por eso vengo a preguntar o ver si alguno de ustedes tiene alguna idea sobre que seria lo mas factible para hacerlo.

Tambien me he puesto a leer un poco sobre YUGIOH Phoenix, que es un programa para PC para jugar YUGIOH en linea el cual todos los efectos y demas de los monstruos estan contenidos en archivos LUA, el cual si lo conozco mas nunca lo he manejado, ademas de que no entiendo como el programa en sí, los lee o como los maneja, o si alguno conoce ya mejor como hacerlo seria de gran ayuda hehehe, ya que lo que deseo es hacer este juego para Android y que sea Online(Esto es lo de menos, para esto ya tengo la idea de como lo hare, e hice pequeñas pruebas sobre Ataque y demas hehe)

Aqui uno de ellos, bueno esto lo dejo por si puede servir d algo nose:
--リミット·リバース
function c27551.initial_effect(c)
    --Activate
    local e1=Effect.CreateEffect(c)
    e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
    e1:SetType(EFFECT_TYPE_ACTIVATE)
    e1:SetCode(EVENT_FREE_CHAIN)
    e1:SetHintTiming(0,TIMING_END_PHASE+TIMING_ATTACK)
    e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
    e1:SetTarget(c27551.target)
    e1:SetOperation(c27551.operation)
    c:RegisterEffect(e1)
    --Destroy
    local e2=Effect.CreateEffect(c)
    e2:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_SINGLE)
    e2:SetCode(EVENT_LEAVE_FIELD)
    e2:SetOperation(c27551.desop)
    c:RegisterEffect(e2)
    --Destroy2
    local e3=Effect.CreateEffect(c)
    e3:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD)
    e3:SetRange(LOCATION_SZONE)
    e3:SetCode(EVENT_LEAVE_FIELD)
    e3:SetCondition(c27551.descon2)
    e3:SetOperation(c27551.desop2)
    c:RegisterEffect(e3)
    --Destroy3
    local e4=Effect.CreateEffect(c)
    e4:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD)
    e4:SetRange(LOCATION_SZONE)
    e4:SetCode(EVENT_CHANGE_POS)
    e4:SetCondition(c27551.descon3)
    e4:SetOperation(c27551.desop3)
    c:RegisterEffect(e4)
end
function c27551.filter(c,e,tp)
    return c:IsAttackBelow(1000) and c:IsCanBeSpecialSummoned(e,0,tp,false,false)
end
function c27551.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
    if chkc then return chkc:IsLocation(LOCATION_GRAVE) and chkc:IsControler(tp) and c27551.filter(chkc,e,tp) end
    if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0
        and Duel.IsExistingTarget(c27551.filter,tp,LOCATION_GRAVE,0,1,nil,e,tp) end
    Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
    local g=Duel.SelectTarget(tp,c27551.filter,tp,LOCATION_GRAVE,0,1,1,nil,e,tp)
    Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,g,1,0,0)
end
function c27551.operation(e,tp,eg,ep,ev,re,r,rp)
    local c=e:GetHandler()
    local tc=Duel.GetFirstTarget()
    if c:IsRelateToEffect(e) and tc:IsRelateToEffect(e) then
        if Duel.SpecialSummon(tc,0,tp,tp,false,false,POS_FACEUP_ATTACK)==0 then return end
        c:SetCardTarget(tc)
    end
end
function c27551.desop(e,tp,eg,ep,ev,re,r,rp)
    local tc=e:GetHandler():GetFirstCardTarget()
    if tc and tc:IsLocation(LOCATION_MZONE) then
        Duel.Destroy(tc,REASON_EFFECT)
    end
end
function c27551.descon2(e,tp,eg,ep,ev,re,r,rp)
    local tc=e:GetHandler():GetFirstCardTarget()
    return tc and eg:IsContains(tc) and tc:IsReason(REASON_DESTROY)
end
function c27551.desop2(e,tp,eg,ep,ev,re,r,rp)
    Duel.Destroy(e:GetHandler(),REASON_EFFECT)
end
function c27551.descon3(e,tp,eg,ep,ev,re,r,rp)
    local tc=e:GetHandler():GetFirstCardTarget()
    return tc and eg:IsContains(tc) and tc:IsDefencePos()
end
function c27551.desop3(e,tp,eg,ep,ev,re,r,rp)
    local c=e:GetHandler()
    local tc=c:GetFirstCardTarget()
    local g=Group.FromCards(tc,c)
    Duel.Destroy(g,REASON_EFFECT)
end


Bueno cualquier sugerencia o duda u opinion pues es bien recibida hehe.

Tambien vi este tema: http://foro.elhacker.net/empty-t319083.0.html el cual me sorprendio bastante y se ve muy bien la verdad hehehe haber como me va o como es que el maneja los efectos ... xP

rommel89

ese es el script de la carta trampa llamada  Limet Reverse

s00rk

Si eso lo entiendo hehe, pero lo que queria ver era si podia utilizar tales script para realizar el codigo para android, aunque bueno para ello tendria que entender como el ejecutable de YUGIOH Pro utiliza tales codigos o sus llamadas ya que el nombre de las variables que muestra ahi no me da ni una pista si acaso me doy ideas de que hace cada parte pero aun asi no puedo hacer mucho si no entiendo como lo maneja el ejecutable.

Aun asi hablando con un compañer de aqui del foro que hizo su servidor pero para PC me dijo que el tuvo que hacer cada efecto carta por carta y al parecer eso es lo que tendre que hacer aunque por el momento estoy en otro proyecto asi que terminandolo, retomare este e intentare checar mejor el ejecutable de yugioh pro aver que saco >__<! xD

BlackZeroX

Si no mal recuerdo el chavo programo cada carta... no tengo idea si actualmente es así...

Aun así yo en lo personal PARSE TODOS los datos de una web wiki en un .ini... (lo automatice no estoy loco para hacerlo manualmente)

por ejemplo:

imagen: Black Brutdrago.jpg
Configuración; Black Brutdrago.jpg.ini

Contenido del .ini.

Código (ini) [Seleccionar]


cardname =   Black Brutdrago
Card Category =   Monster Cards
ATK =   3000
DEF =   2600
Level =   8
Card Type =   Synchro Monsters
Card Number =   96029574
Spanish Name =  
Atributos =   FIRE
Actions =   Discards for cost
Anti-Support =   No Entry
Archetype Related =   No Entry
Archetypes Support =   No Entry
Attack =   No Entry
Counters =   No Entry
Effect type =   Ignition Monster Effects
Effect type =   Trigger Monster Effects
Types =   Dragon
Types =   Synchro
Types =   Effect
Type =   Dragon
Synchro Material =   No Entry
Stats =   No Entry
Archetype Related =   No Entry
Archetypes =   No Entry
Archetypes Support = No Entry
Life Points =   No Entry
MonsterSpellTrap =   Destroys Spell Cards
MonsterSpellTrap =   Destroys Trap Cards
RFP =   No Entry
Summoning =   Special Summons from your Graveyard
Fusion Material =   No Entry
Descripcion: =   1 Tuner + 1 or more non-Tuner [[Gemini  &hellip; 1 Tuner + 1 or more non-Tuner Gemini monstersOnce per turn, you can send 1 Gemini monster from your hand to the Graveyard to select and destroy 1 Spell or Trap Card your opponent controls. When this card is destroyed and sent to the Graveyard, you can select 1 Gemini monster in your Graveyard and Special Summon it. The Special Summoned Gemini monster is treated as an Effect Monster, and gains its effect.  Effect Monster, and gains its effect.



Ahora con solo esos datos solo tendría que programar cada efecto según parámetros...

En esta carta hay dos efectos:

Effect type    =     Ignition Monster Effects
Effect type    =     Trigger Monster Effects

Afectando según a esto:

MonsterSpellTrap    =     Destroys Spell Cards
MonsterSpellTrap    =     Destroys Trap Cards

y aun dice que su acción tiene un costo:

Actions    =     Discards for cost

* PERO CLARO aun así se necesitan mas detalles... puesto que el efecto implica a ciertas cartas que no están especificas...

Dulces Lunas!¡.
The Dark Shadow is my passion.

neyper

hola amigo quisiera que me ayudaras en algo porfavor

s00rk

Cita de: BlackZeroX (Astaroth) en 15 Agosto 2012, 08:09 AM
Si no mal recuerdo el chavo programo cada carta... no tengo idea si actualmente es así...

Aun así yo en lo personal PARSE TODOS los datos de una web wiki en un .ini... (lo automatice no estoy loco para hacerlo manualmente)

por ejemplo:

imagen: Black Brutdrago.jpg
Configuración; Black Brutdrago.jpg.ini

Contenido del .ini.

Código (ini) [Seleccionar]


cardname =   Black Brutdrago
Card Category =   Monster Cards
ATK =   3000
DEF =   2600
Level =   8
Card Type =   Synchro Monsters
Card Number =   96029574
Spanish Name =  
Atributos =   FIRE
Actions =   Discards for cost
Anti-Support =   No Entry
Archetype Related =   No Entry
Archetypes Support =   No Entry
Attack =   No Entry
Counters =   No Entry
Effect type =   Ignition Monster Effects
Effect type =   Trigger Monster Effects
Types =   Dragon
Types =   Synchro
Types =   Effect
Type =   Dragon
Synchro Material =   No Entry
Stats =   No Entry
Archetype Related =   No Entry
Archetypes =   No Entry
Archetypes Support = No Entry
Life Points =   No Entry
MonsterSpellTrap =   Destroys Spell Cards
MonsterSpellTrap =   Destroys Trap Cards
RFP =   No Entry
Summoning =   Special Summons from your Graveyard
Fusion Material =   No Entry
Descripcion: =   1 Tuner + 1 or more non-Tuner [[Gemini  &hellip; 1 Tuner + 1 or more non-Tuner Gemini monstersOnce per turn, you can send 1 Gemini monster from your hand to the Graveyard to select and destroy 1 Spell or Trap Card your opponent controls. When this card is destroyed and sent to the Graveyard, you can select 1 Gemini monster in your Graveyard and Special Summon it. The Special Summoned Gemini monster is treated as an Effect Monster, and gains its effect.  Effect Monster, and gains its effect.



Ahora con solo esos datos solo tendría que programar cada efecto según parámetros...

En esta carta hay dos efectos:

Effect type    =     Ignition Monster Effects
Effect type    =     Trigger Monster Effects

Afectando según a esto:

MonsterSpellTrap    =     Destroys Spell Cards
MonsterSpellTrap    =     Destroys Trap Cards

y aun dice que su acción tiene un costo:

Actions    =     Discards for cost

* PERO CLARO aun así se necesitan mas detalles... puesto que el efecto implica a ciertas cartas que no están especificas...

Dulces Lunas!¡.

Si yo tambien lo saque toda la info posible parseando una wiki de Yugi, lo malo pues era eso sobre los eff de cartas y demas, yo pues queria intentar ver si podia ver como funciona el de Yugioh phoenix que toda la info la trabaja mediantes archivos LUA y el ejecutable solo se encarga de usarlos ya sea los effectos asi como sus valores de atack y def hehe

Pero pues ahi luego seguire lo deje igual como tu dices aunque yo os puse en formato xml :B

BlackZeroX

Una vez cargados solo hay que aplicar una lógica a llamadas de funciones como ya te mencione... siempre tendremos que meterle mano a los archivos de configuración nos guste o no...

Cita de: s00rk en 15 Agosto 2012, 22:36 PM
Pero pues ahi luego seguire lo deje igual como tu dices aunque yo os puse en formato xml :B

No importa el formato yo preferí el .ini, bueno ni es de formato ini de hecho solo son lineas que lo puedo programar de una manera tan simple como un .ini... leer linea a linea...

Dulces Lunas¡¡.
The Dark Shadow is my passion.