Enviar respuesta 
 
Calificación:
  • 6 votos - 3.33 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Subs y Functions útiles
08-08-2010, 02:18 AM (Este mensaje fue modificado por última vez en: 28-08-2010 01:01 PM por Burdi.)
Mensaje: #1
Subs y Functions útiles

Ha llegado un punto que es muy difícil encontrar las soluciones a los problemas más comunes con algunas funciones creadas con sadscripting.

Por eso hago este post, para que sea más fácil de encontrar.

Aquí voy a poner todas las funciones y subs creados y que sean útiles para muchos scripts, y si hay mejoras, lo pondré ya mejorado.


GiveItemAmon by Burdi:

Dar un determinado numero de un item amontonable (si ya tienes alguno de este mismo item, lo añadirá como amontonable).
Por ejemplo: tienes 24 de madera y quieres añadir 26. Con el script de Stream te crearía otros 26 en otro slot del inventario. Con esto te los añade al msimo slot con un total de 50.

Código:
' - GiveItemAmon by Burdi -

Sub GiveItemAmon(index, item, value)
SLOT = 1
encontrado = 0
Do While SLOT < 24
If GetPlayerInvItemNum(index, SLOT) = item Then
Call SetPlayerInvItemValue(index, SLOT, GetPlayerInvItemValue(index, SLOT) + value)
Call SendInventoryUpdate(index, SLOT)
SLOT = 24
encontrado = 1
End If
SLOT = SLOT + 1
Loop

If encontrado = 0 Then
SLOT = 1
Do While SLOT < 24
If GetPlayerInvItemNum(index, SLOT) = 0 Then
Call SetPlayerInvItemNum(index, SLOT, item)
Call SetPlayerInvItemValue(index, SLOT, value)
Call SendInventoryUpdate(index, SLOT)
SLOT = 24
End If
SLOT = SLOT+1
Loop
End If
End Sub

GiveItem by Burdi (retocado del de Stream):

Si quereis poder dar items amontonables y items no amontonables tendreis que usar los dos Subs. Si solo quereis dar items amontonables en todo el main, solo tendreis que usar el otro.

Código:
' - GiveItem by Burdi -

Sub GiveItem(index, item)
SLOT = 1
Do While SLOT < 24
If GetPlayerInvItemNum(index, SLOT) = 0 Then
Call SetPlayerInvItemNum(index, SLOT, item)
Call SendInventoryUpdate(index, SLOT)
SLOT = 24
End If
SLOT = SLOT+1
Loop
End Sub


CheckItemValue by Burdi (retocado del de Ellesar):

Con la siguiente función puedes comprobar cuánta cantidad tienes de un item, ya sea amontonable o no, incluso si es amontonable y lo tienes en dos "paquetes" diferentes. Puedes usarla para ponerlo en un If y luego usar el TakeItem de Stream (por ejemplo).

Código:
' - CheckItemValue by Burdi -

Function CheckItemValue(index, item)
SLOT = 1
encontrado = 0
CheckItemValue = 0
Do While SLOT < 24
If GetPlayerInvItemNum(index, SLOT) = item Then
CheckItemValue = CheckItemValue + GetPlayerInvItemValue(Index, SLOT)
encontrado = 1
End If
SLOT = SLOT+1
Loop
If encontrado = 0 Then
CheckItemValue = 0
End If
End Function

TakeItem by Burdi (retocado del de Stream):

Te quita x cantidad del item que quieras. Si pones "all" te quita todo lo que tengas, y si pones como value el número que se tiene del item, también lo quita todo. Si lo usas con items no amontonables solo te quita uno.

Código:
' - TakeItem by Burdi -

Sub TakeItem(index, item, value)
If value = "all" Then
SLOT = 1
Do While SLOT < 24
If GetPlayerInvItemNum(index, SLOT) = item Then
Call SetPlayerInvItemNum(index, SLOT, 0)
Call SetPlayerInvItemValue(index, SLOT, 0)
Call SendInventoryUpdate(index, SLOT)
SLOT = 24
End If
SLOT = SLOT+1
Loop
Else
SLOT = 1
Do While SLOT < 24
If GetPlayerInvItemNum(index, SLOT) = item Then
If GetPlayerInvItemValue(index, SLOT) = value Then
Call SetPlayerInvItemNum(index, SLOT, 0)
Call SetPlayerInvItemValue(index, SLOT, 0)
Call SendInventoryUpdate(index, SLOT)
ElseIf GetPlayerInvItemValue(index, SLOT) > value Then
Call SetPlayerInvItemValue(index, SLOT, GetPlayerInvItemValue(index, SLOT) - value)
Call SendInventoryUpdate(index, SLOT)
End If
SLOT = 24
End If
SLOT = SLOT+1
Loop
End If
End Sub


GetPlayerWeapon by 6dragon6:

Esta función te devuelve el ID del arma que llevas equipada.

Código:
'============Arma Equipada (By 6dragon6)=====

Function GetPlayerWeapon(Index)
weaponslot = GetPlayerWeaponSlot(Index)
weaponid = GetPlayerInvItemNum(Index,weaponslot)
GetPlayerWeapon = weaponid
End Function


GetPlayerArmor:

Esta función te devuelve el ID del armadura que llevas equipada.

Código:
Function GetPlayerArmor(Index)
armorslot = GetPlayerArmorSlot(Index)
armorid = GetPlayerInvItemNum(Index,armorslot)
GetPlayerArmor= armorid
End Function

GetPlayerLegs:

Esta función te devuelve el ID del item que llevas equipado en las piernas.

Código:
Function GetPlayerLegs(Index)
legsslot= GetPlayerLegsSlot(Index)
legsid = GetPlayerInvItemNum(Index,legsslot)
GetPlayerLegs= legsid
End Function

GetPlayerHelmet:

Esta función te devuelve el ID del casco que llevas equipado.

Código:
Function GetPlayerHelmet(Index)
helmetslot = GetPlayerHelmetSlot(Index)
helmetid = GetPlayerInvItemNum(Index,helmetslot)
GetPlayerHelmet= helmetid
End Function

GetPlayerRing:

Esta función te devuelve el ID del anillo que llevas equipado.

Código:
Function GetPlayerRing(Index)
ringslot = GetPlayerRingSlot(Index)
ringid = GetPlayerInvItemNum(Index,ringslot)
GetPlayerRing= ringid
End Function

GetPlayerNecklace:

Esta función te devuelve el ID del collar que llevas equipado.

Código:
Function GetPlayerNecklace(Index)
necklaceslot = GetPlayerRingSlot(Index)
necklaceid = GetPlayerInvItemNum(Index,necklaceslot)
GetPlayerNecklace= necklaceid
End Function

GetPlayerShield:

Esta función te devuelve el ID del escudo que llevas equipado.

Código:
Function GetPlayerShield(Index)
shieldslot = GetPlayerShieldSlot(Index)
shieldid = GetPlayerInvItemNum(Index,shieldslot)
GetPlayerShield= shieldid
End Function


Unos Subs para hacer scripts de hechizos:

GiveSpell adaptado por Jeshuem:

Código:
'**************************
Sub GiveSpell(index, spell)
'**************************
Dim slot
slot = 1
Do while slot <= 20
If GetPlayerSpell(index, Int(slot)) < 1 Then
Call SetPlayerSpell(index, Int(slot), spell)
Exit Sub
End If
slot = slot + 1
Loop
End Sub

TakeSpell adaptado por Jeshuem:

Código:
'**************************
Sub TakeSpell(index, spell)
'**************************
Dim slot
slot = 1
Do while slot <= 20
If GetPlayerSpell(index, Int(slot)) = spell Then
Call SetPlayerSpell(index, Int(slot), 0)
Exit Sub
End If
slot = slot + 1
Loop
End Sub

ClearSpells adaptado por Jeshuem:

Borra todos los spells

Código:
'***********************
Sub ClearSpells(index)
'***********************
Dim slot
slot = 1
Do while slot <= 20
Call SetPlayerSpell(index, Int(slot), 0)
slot = slot + 1
Loop
Call PlayerMsg(index, "Hechizos Borrados.", 14)
End Sub

De momento eso es todo.

Saludos!

[Imagen: aca854b73d5a41bb.jpg]
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 02:32 AM
Mensaje: #2
RE: Mejoras del GiveItem, CheckItem, etc.

hey!... me gusto tu post o_ó... te felicito de los mejores que he visto xD muchas,muchas gracias o_ó

voy a probar o_ó como me va y te digo gracias....
pero... una pregunta ....
el... GiveItem by Burdi:
te añade el item por ejemplo 20 pescados.. a los 20 pescados que ya tenias o.o es decir.. no crea dos montones de 20. sino que 1 de 40. (no se si se entendio xD)
pero si no tubieras pescado.... entonces solo obtienes 20 de pescado cuando se activa el script?

y este script se puede adaptar por ejemplo para que.... cuando uses un item scripteado ejemplo (Caja de nueses) (al hacerle doble click crea 20 nueces en tu inventario.)

Bueno hay estare probando =) mil gracias!
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 02:36 AM (Este mensaje fue modificado por última vez en: 08-08-2010 02:41 AM por Burdi.)
Mensaje: #3
RE: Mejoras del GiveItem, CheckItem, etc.

Exacto, es tal y como dices.

Si ya tienes ese item, te lo añade al mismo montón, y si no lo tienes, te crea un montón nuevo en un sitio libre de tu inventorio.

I sí, lo puedes usar con la caja mágica o lo que quieras, que te dé el montón que quieras de tu item, y si ya tienes algunos, te los añade al mismo montón.

Saludos!



EDITO: Tengo que mejorar una cosa, y es que cuando quieres dar 2 items no amontonables, solo te da uno aunque lo repitas mil veces. Ahora me pongo a investigar... Pero no se si existe un comando para saber si un item es amontonable.

[Imagen: aca854b73d5a41bb.jpg]
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 02:53 PM
Mensaje: #4
RE: Mejoras del GiveItem, CheckItem, etc.

Perfecto, podrías añadir otra cosita que sería, si el item que quieres dar es amontonable, usa el giveitem (amontonable) si no es amontonable, te lo da normal.. Big Grin

Los invitados no pueden ver los enlaces. Por favor registrate AQUI para ver los enlaces.[Imagen: logonovcv.png]
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 03:20 PM
Mensaje: #5
RE: Mejoras del GiveItem, CheckItem, etc.

Justo ahora estaba actualizando con los 2 giveitem y tal...

Más tarde actualizaré con los takeitem y los check item y todo esto xD

Saludos!

[Imagen: aca854b73d5a41bb.jpg]
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 04:11 PM (Este mensaje fue modificado por última vez en: 08-08-2010 04:18 PM por judoka.)
Mensaje: #6
RE: Subs y Functions útiles

No me funciona el de GiveItemAmon.. no me da el item que le pongo.. Confused
CantidadMadera = Rand(1,6)
Call GiveItemAmon(Index, 11, CantidadMadera)

si me lo da, pero me ha bloqueado(no me deja moverme)... cuando tiro la madera que tenia, ya funciona.. Confused

EDITO: no me lo da.. me tira error..!

Los invitados no pueden ver los enlaces. Por favor registrate AQUI para ver los enlaces.[Imagen: logonovcv.png]
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 04:29 PM (Este mensaje fue modificado por última vez en: 08-08-2010 04:33 PM por Burdi.)
Mensaje: #7
RE: Subs y Functions útiles

Que raro... A mi me funciona perfectamente... Ahora me pongo a investigar un poquito y te comento a ver que tal.

EDITO: Para probarlo he puesto en un caso de comando:

"Case /prueba"
CantidadMadera = Rand(1,6)
Call GiveItemAmon(Index, 8, CantidadMadera)
Exit Sub

He puesto el item número 8 porqué es el que tengo como amontonable ahora mismo.

Pues con esto, al hacer /prueba, me da entre 1 y 6 del item aleatoriamente... Y me funciona perfectamente.

Revisa que no sean otras partes del script las que fallan, porqué como digo, a mi me funciona perfectamente.

Saludos!

PD: Para comprobarlo haz lo mismo que yo, pon el caso /prueba y me dices si te funciona.

[Imagen: aca854b73d5a41bb.jpg]
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 05:06 PM
Mensaje: #8
RE: Subs y Functions útiles

Bueno hace tiempo que queria poner un post asi x'D.
Lo marco como importante.

Saludos.

[Imagen: ellesarwor.png]

Los invitados no pueden ver los enlaces. Por favor registrate AQUI para ver los enlaces.

El Código es poesía
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 05:12 PM
Mensaje: #9
RE: Subs y Functions útiles

Gracias Ellesar.

Todos los que tengas algun sub o funcion que consideráis importante me lo pasáis y si lo veo interesante lo pondre en el post principal.

Saludos!

[Imagen: aca854b73d5a41bb.jpg]
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
08-08-2010, 05:38 PM (Este mensaje fue modificado por última vez en: 08-08-2010 05:38 PM por judoka.)
Mensaje: #10
RE: Subs y Functions útiles

Añade estos(son los de obtener el ID de tu equipo):
Código:
Function GetPlayerWeapon(Index)
weaponslot = GetPlayerWeaponSlot(Index)
weaponid = GetPlayerInvItemNum(Index,weaponslot)
GetPlayerWeapon = weaponid
End Function

Function GetPlayerArmor(Index)
armorslot = GetPlayerArmorSlot(Index)
armorid = GetPlayerInvItemNum(Index,armorslot)
GetPlayerArmor= armorid
End Function

Function GetPlayerLegs(Index)
legsslot= GetPlayerLegsSlot(Index)
legsid = GetPlayerInvItemNum(Index,legsslot)
GetPlayerLegs= legsid
End Function

Function GetPlayerHelmet(Index)
helmetslot = GetPlayerHelmetSlot(Index)
helmetid = GetPlayerInvItemNum(Index,helmetslot)
GetPlayerHelmet= helmetid
End Function

Function GetPlayerRing(Index)
ringslot = GetPlayerRingSlot(Index)
ringid = GetPlayerInvItemNum(Index,ringslot)
GetPlayerRing= ringid
End Function

Function GetPlayerNecklace(Index)
necklaceslot = GetPlayerRingSlot(Index)
necklaceid = GetPlayerInvItemNum(Index,necklaceslot)
GetPlayerNecklace= necklaceid
End Function

Function GetPlayerShield(Index)
shieldslot = GetPlayerShieldSlot(Index)
shieldid = GetPlayerInvItemNum(Index,shieldslot)
GetPlayerShield= shieldid
End Function

Los invitados no pueden ver los enlaces. Por favor registrate AQUI para ver los enlaces.[Imagen: logonovcv.png]
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
Enviar respuesta 


Posibles temas similares...
Tema: Autor Respuestas: Vistas: Último mensaje
  Subs para los hechizos Mr. Jeshuem 2 483 03-10-2010 05:38 AM
Último mensaje: dato

Salto de foro:


Usuario(s) navegando en este tema: 4 invitado(s)
ContáctanosAlterEngineVolver arribaVolver al contenidoArchivo (Modo simple)Sindicación RSS