[Aporte] Defensa con espadas (CruzNegrAO)

ZoLTaR

RaZoV - lLider de CruzNegra|
Buenas...pues aqui seguimos en Portugal con la quarentena..yo ando mal de la respiracion asi que no salgo ni en... pues eso...
entonces voy programando mis ideas que tenia apuntadas hace años y otras que me vienen a mente jejeje..
esta la acabo de hacer..nose si esta funcional, aqui es super tarde, igual creo que esta todo bien.. cualquier cosa, prueben y me dicen.. dan alguna sugerencia etc y lo mejoro...

La idea es, ambos users tienen una espada o un baculo, entonces al pegar a la vez, como os habra pasado alguna vez...que pegais y el adversario pega a la vez..pues en este caso va a haber una defensa con espadas... podeis luego cambiar eso..poner un random..o poner que saque algo de daño igual etc, yo solamente he puesto, cada vez que se peguen a la vez y tengan espadas, pues no sacan nada uno al otro pero... la espada mas fuerte de ambas va a sacar vida util a la mas floja..la vida util de todas es igual, 100, luego lo que va a sacar es el diferencial, esta todo explicado en el code T_~

Comenzemos por el servidor:

Vamos al sub UsuarioAtacaUsuario y esta linea la borramos:

Código:
If UsuarioImpacto(AtacanteIndex, VictimaIndex) Then
reemplazamos por esto: (tengo mis dudas aqui porque asi si el user ataca a la vez con un arco, o lo que sea seguro va tambien para el nuevo Sub UserDefendeconArma y ahi no sacará daño y ta creado un nuevo bug..prueben igualmente y se incrementa un And si atacanteIndex y victimaIndex tienen objeto arma con VidaUtil > 0 ...es simple igual...

Código:
'Si se atacan entre ellos a la vez.. choca el arma de cada uno con la de su oponente..
If UsuarioImpacto(AtacanteIndex, VictimaIndex) And UsuarioImpacto(VictimaIndex, AtacanteIndex) Then
Call UserDefiendeConArma(AtacanteIndex, VictimaIndex)
ElseIf UsuarioImpacto(AtacanteIndex, VictimaIndex) Then

En el modulo SistemadeCombate agregamos este nuevo sub:

Código:
Sub UserDefiendeConArma(ByVal AtacanteIndex As Integer, ByVal VictimaIndex As Integer)
'ZoLTaR
'La idea es poner un sistema de que si el arma es mas poderosa que la otra, imaginemos..
'Daga contra espada AO.. la daga tiene 1 de ataque..la espada AO imaginemos que 50... hay 49 de diferencia..
'Creamos una vida util de 100 por arma y al llegar a 100 de impacto se rompe el arma...la espada AO con 3 veces romperia la daga...
'Solamente se rompe el arma por defensa con espadas..osea al atacar al otro sin ser atacado no afecta la vida de
'la espada..
Dim ArmaAtHIT As Integer
Dim ArmaVicHit As Integer
Dim DifArmasHIT As Integer 'Diferença entre a arma mais forte e a mais fraca T_~



'Verificamos que armas tienen los adversarios... y enviamos la respectiva particula ..idea mia..ZoLTaR T_~
ArmaAtHIT = ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).MaxHIT
ArmaVicHit = ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).MaxHIT

'Si es baculo o espada contra baculo o espada
If ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).VidaUtil > 0 And _
   ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).VidaUtil > 0 Then
'Ponemos el msg "Tu enemigo ha rechazado con su (Nombre del arma) tu ataque"

    Call SendData(SendTarget.ToIndex, AtacanteIndex, 0, "AM" & "Tu enemigo ha rechazado con su " & ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).name & " tu ataque!")

'Enviamos a respetiva particula ou Fx para o char da victima
    Call SendData(SendTarget.ToPCArea, AtacanteIndex, UserList(AtacanteIndex).Pos.Map, "CFF" & UserList(VictimaIndex).Char.CharIndex & "," & 5 & "," & 0)
'Si su arma es mas potente que la de la victima quitamos vida util al arma del enemigo
    If ArmaAtHIT > ArmaVicHit Then  ' Arma do atacante mais forte
        DifArmasHIT = ArmaAtHIT - ArmaVicHit
        ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).VidaUtil = ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).VidaUtil - DifArmasHIT
        'Colocamos en el label de la vida util del arma en el FrmMain del cliente -Valor do ataque da arma oponente en rojo
    Call SendData(SendTarget.ToIndex, VictimaIndex, 0, "DCE" & ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).VidaUtil)
       
    ElseIf ArmaVicHit > ArmaAtHIT Then ' Arma da victima mais forte
        DifArmasHIT = ArmaVicHit - ArmaAtHIT
        ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).VidaUtil = ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).VidaUtil - DifArmasHIT
        Call SendData(SendTarget.ToIndex, AtacanteIndex, 0, "DCE" & ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).VidaUtil)
    Else        'Caso tenham o mesmo hit ou algum bug surja..
        Exit Sub    'Ignoramos este conjunto de regras..
    End If
'Si es baculo o espada contra proyectil, nudillos o mano, o entre estos..osea todo lo demas...mostramos sangre..
    'Else
'Mostramos Fx Sagre ou particula Sangre portanto chamamos o sub userdaño

    End If
    'Si com o choque das armas parte-se a arma da victima
    If ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).VidaUtil < 1 Then 'Se acaba a vida util da arma..
'Borramos el arma equipada del inventario del VictimaIndex
        Call QuitarUserInvItem(VictimaIndex, UserList(VictimaIndex).Invent.WeaponEqpSlot, 1)
'Avisamos al user que se ha roto el arma...
        Call SendData(SendTarget.ToIndex, VictimaIndex, 0, "AM" & "Tu " & ObjData(UserList(VictimaIndex).Invent.WeaponEqpObjIndex).name & " se ha roto!")
  'Si com o choque das armas parte-se a arma do atacante
    ElseIf ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).VidaUtil < 1 Then 'Se acaba a vida util da arma..
'Borramos el arma equipada del inventario del VictimaIndex
        Call QuitarUserInvItem(AtacanteIndex, UserList(AtacanteIndex).Invent.WeaponEqpSlot, 1)
'Avisamos al user que se ha roto el arma...
        Call SendData(SendTarget.ToIndex, AtacanteIndex, 0, "AM" & "Tu " & ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).name & " se ha roto!")
    End If

End Sub

Ahora buscamos en declaraciones, dentro del type objdata por OBJType As eOBJType

abajo ponemos:

Código:
VidaUtil As Integer 'Vida util de uma arma T_~ ZoLTaR
Buscais

Código:
ObjData(Object).MinHIT = val(Leer.GetValue("OBJ" & Object, "MinHIT"))
y abajo poneis:

Código:
ObjData(Object).VidaUtil = val(Leer.GetValue("OBJ" & Object, "VidaUtil"))

Ahora vamos a los .DAT

y ponemos VidaUtil=100 en las armas, yo he puesto en todas..ahora eso ya depende de vostros, quedaria asi por ejemplo:

[OBJ983]
Name=Hacha Samariana
GrhIndex=21024
ObjType=2
VidaUtil=100 <=== Agregais esto namas a cada arma
NumRopaje=34
Agarrable=0
Anim=34
MinHIT=24
MaxHIT=27
Valor=2025350
Crucial=1
CP1=Mago
CP2=BARDO
CP3=DRUIDA
CP4=ASESINO
CP5=NIGROMANTE
CP6=LADRON
CP7=GLADIADOR
NivelNecesario=40
subastable=1


Ahora en el cliente recibimos los datos del paquete que trae la vida util del arma..

Arriba de Case "CFX"

ponemos este:

Código:
Case "DCE"                  ' >>>>> Defesa com espadas T_~ ZoLTaR
            Dim VidaUtil As Integer
            Rdata = Right$(Rdata, Len(Rdata) - 3)
            VidaUtil = Val(ReadField(1, Rdata, 44))
            frmMain.lblVidaUtilArma.Caption = VidaUtil
            Exit Sub
Por ultimo creamos en el FrmMain ese lbl que esta en el paquete osea un Label llamado lblVidaUtilArma y cuando equipeis el arma saldra 100 y haber el choque de espadas si la vuestra es mas flojita que la del oponente va restando vida util en el label y cuando tenga 0 desaparece el arma del inventario.. Listo creo que esta todo.. Saludos.. recordad, cualquier cosa con falta o error avisad y se arregla T_~
ZoLTaR
 
Última edición:

Mufarety

Destructor Lvl 5
Yo creo que evites los comentarios, hay más comentarios que lineas de código en ese Sub, y el calculo de la diferencia es algo errado ya que puede llegar a dar negativo dependiendo de si quien se convierte en atacante o victima alterando de esta forma la función del código.

Respecto a la idea no es para nada mala, pero creo que podría adaptarse mejor y también esto llevaría a rebalancear el combate de las clases ya que esto pone en ventaja defensiva a cada clase olvidandose de la probabilidad de fallar o que frene el ataque con escudo.
 

ZoLTaR

RaZoV - lLider de CruzNegra|
Bueno gracias por comentar, es siempre positivo leer opiniones.. La verdad comento mucho porque ni toda la gente sabe programar y asi es una forma de que entiendan lo que se hace a cada paso y aprenden mas facilmente a programar.
La parte de lo negativo no veo donde, ya que hago verificacion antes con el if para eso mismo..para detectar el que tiene arma mas fuerte para evitar que pase eso :) la verdad donde veo que puede haber error es que si el user ataca con arrojadiza etc a la vez ninguno sacara vida a ninguno y no sucedera nada..tendre que mejorar la verificacion en el sub usuarioatacausuario para evitar eso. Cuanto al balanceo, porque lo ves asi? esto es como una defensa con escudos, es un extra, como bien explique, eso sucede cuando dos personajes se pegan de frente uno al otro a la vez...lo que no es facil de ocurrir.. esto es super para evitar esos que hacen inmo al lado y pegan, porque si tienen un arma no tan buena ademas de no sacar vida jugando "sucio" ven su arma quedar dañada y cuando vean que resta poca vida util seguramente paran de dar inmo al lado.. osea positivo ejejje
 

mergui

The 'DM' Never Forgets.
Ex-Staff
Me encantó la idea loco, supongo que la aplicación será algo extraña, pero me gustó mucho.
 

gercho

Loading...
Buen dia, tengo una consulta.. lo lei por arriba antes de irme a trabajar, si el usuario hace algun movimiento como para que el servidor lea de nuevo el dat de la espada, la vida util vuelve a ser de 100? No faltaria algo que guarde el estado de las armas?
Muy buena la idea del sistema!!
 

ZoLTaR

RaZoV - lLider de CruzNegra|
Buen dia, tengo una consulta.. lo lei por arriba antes de irme a trabajar, si el usuario hace algun movimiento como para que el servidor lea de nuevo el dat de la espada, la vida util vuelve a ser de 100? No faltaria algo que guarde el estado de las armas?
Muy buena la idea del sistema!!
Buenas tardes, exacto Gercho, es unas de las cosas que tengo que testear cuando se me pase esto de estar isolado que esas cosas me gusta estar con mi primo al lado y ir testeando todo y algo mas y eso esta en la lista, pero tambien me quede con esa duda,como es una variable y el servidor no apaga, en teoria va cambiando la espada del User Tal, o si el user la tira y la coje , etc, tengo q probar eso.. buena sugerencia igual :D
 
Arriba