Bueno hace tiempo tube muchos problemas para crear un script del tipo tienda, preguntando y preguntando, nadie me dio respuesta, asi que si a alguien se le biene la duda dejare esto como aporte, para que no pase por lo que yo pase...
Bueno tengo 2 clases de script, uno es funcional en un solo nivel, o sea este se recetea al pasas a otro mapa, y uno que se conserva aunque cambies de mapa.
Primero ire con el de un solo mapa:
Ya lo que hay que hacer es crear un script de suma (asi les digo yo)
#include "zcommon.acs"
Int score=0; //este es el indicador de dinero inicia en 0
Script 1 (int scoreAdd)
{
score += scoreAdd;
}
//este script funciona en conjunto a decorate.
este el el inventory
*****************************
ACTOR Credit10 : CustomInventory
{
Inventory.PickupMessage "You got 10 Credits!"
+SOLID
+COUNTITEM
States
{
Spawn:
COIN AAAA 3
loop
Pickup:
COIN A 11 ACS_ExecuteAlways(1, 0, "este es el valor de entrada, o sea cuanto dinero se gana" X)
//Aqui va esto al coger el item ejecuta el script de suma Stop
}
}
*******************************
ya aqui voy con script que me dio un amigo, que mostrara en pantalla cuanto dinero tienes:
Script 2 ENTER
{
//Setting the screen
SetHudSize (640, 480, 1);
SetFont("BIGFONT");
//Credits
HudMessage (s:"\cCCredits";HUDMSG_PLAIN,826,CR_UNTRANSLATED,60.0,28.0,1.0);
HudMessage (s:"\cG", d:score;HUDMSG_PLAIN,926,CR_UNTRANSLATED,153.0,28.0,1.0);
delay(1);
restart;
}
ahora un script de compra o como sea que quieran
Int dooropen=0;
script 3 (void)
{
if (Dooropen == 0)
{
if (score >= 250) //aqui indica que nesecitas 250 de dinero o mas
{
Door_Open(2,24);
score -= 250; // es cantidad requerida se te es restada
dooropen = 1; // esto evita que te siga quitando dinero
}
else
Print(s:"You need 250 Credits"); // este mensaje saldra si no tienes dinero suficiente.
}
else
Print(s:"The door is now open");
}
Eso es todo.
Ahora ire con el global.
este es mas sencillo ya que solo chequea tu inventario:
//Buy script 200+ Created By Zedeck
//Merchant tag=200 esto es porque hay un sujeto en la tienda que ejecuta un movimiento segun la variante de compra(use el del strife editado)
script 201 (void) //para comprar un objeto
{
if (CheckInventory("Credit") >= 10) //Credits to need
{
GiveInventory("Clip",10);
SetActorState(200,"SI");// aqui indica que la compra es exitosa y el marchant te agradece
Print(s:"Gracias aqui tienes");
TakeInventory("Credit", 10);
}
else
{
SetActorState(200,"NO"); //obvio respuesta negativa
Print(s:"Necesitas 10 Credits"); //No credits
}
}
************************************
El item de credits es este:
ACTOR Credit : Inventory 11000
{
+FLOORCLIP
Inventory.Amount 10
Inventory.MaxAmount 0x7fffffff // si colocan esto el el tiempo de un powerup, este durara 2 años, asi que basicamente es infinito(quien jugaria un mapa por dos años no?)
+INVENTORY.INVBAR
Inventory.Icon "I_COIN"
Inventory.PickupMessage "You picked up 10 Gold."
States
{
Spawn:
COIN A -1
Stop
}
}
*********************************
Estos oficialmente los estoy usando, asi que agradecria algo de credito por ello.
Tengo uno mas desarrollado para la compra de armas, pero aun esta a prueba, asi que lo editare cuando este listo.
Aviso que si no tienen un thing como el merchant quiten las lineas de SetActorState(X,"Z"); ya que podria causarles problemas.
Pero si lo quieren este es su Decorate, tomenlo como un regalo:
**********************************
ACTOR MerchantMK2 10903 //ojo no puede ser frienldy ya que de error y se pasa asustando.
{
Health 10000000 //basicamente nunca muere
Radius 20
Height 56
Mass 5000
Speed 0
PainChance 255
Monster
+NOTDMATCH
+NOSPLASHALERT
+NODAMAGE
PainSound "shotguy/pain"
obituary "%o fue asesinado por un Mercader...?."
States
{
Spawn:
MRST A 10 A_Look2
MRST A 0 A_Jump(100, "Bored", 0) //estos son para que tenga algo de movimiento.
MRST A 0 A_Jump(100, "Bored2", 0)
MRST A 0 A_Jump(100, "Check", 0)
MRST A 10 A_Look2
Loop
Bored:
MRBD ABCDEDCB 10
Goto Spawn
Bored2:
MRBD AFAFAFAF 10
Goto Spawn
Check:
MRLK AB 30
Goto Spawn
See:
Pain:
MRPN A 3
MRPN B 3 A_Pain
MRPN C 3 ACS_Execute(10, 0, 0) //esto hace que cierre la puerta en frente de el y no se pueda comprar y disparas en la tienda, ademas abre otras puertas, que esconden una turretas que te matan casi al instante.
MRPN D 330
MRPN C 4 A_ClearSoundTarget // Est hace que deje de asustarse.
MRPN B 3
MRPN A 3
Goto Spawn
SI:
MRYS A 20
Talk:
MRGT ABCDEFGHI 5
Goto Spawn
NO:
MRNO AB 6
MRNO C 10
MRNO BA 6
Goto Talk
}
}
Los sprites del Credito y del MerchantMK2 los consegui del wad del Strife1.wad
Bueno espero que le sirvan a todos y espero sus respuestas, comentarios y recomendaciones.
Gracias. _________________ Alabada sea La Gran Ballena de La Luz que permita que exista DooM
|