arrivato a casa, mi sono messo al lavoro.
Ho notato che esisteva già un sorgente per la gestione del coupon, sinceramente i coupon non me li sono mai cagati infatti non so bene nemmeno come devono funzionare (anche se ora un po' il meccanismo l'ho capito guardando il sorgente).
Ho trovato questo : "HANDLE_COUPON_BUY.cs" , non sapendo se faceva altro l'ho copiato in uno nuovo che ho chiamato "HANDLE_SHOP_COUPON.cs" (preso l'idea dal tuo source).
Ho cambiato la riga iniziale perchè generava un eccezione :
Codice:
int ID = Convert.ToInt32(getBlock(0));
è diventata
Codice:
string ID = getBlock(0);
Infatti il blocco 0 che arriva col pacchetto è una stringa, non un intero, ma cosa arriva?
Ecco cosa arriva.
Se tu scrivi il coupon:
1234-5678-8765-4321
nel codice, nella variabile ID, ti arriva:
12345678-8765-4321
in pratica si perde per la strada il primo "meno"
Allora tanto per fare una prova ho messo un po' di ID a casaccio ( che trovi qui sotto) e quindi li ho inseriti in warrock per vedere cosa succedeva, per essere piu precisi, ho inserito "2234-5678-8765-4321" (che corrisponde alla seconda linea nel codice qui sotto) e infatti nel gioco mi sono ritrovato l'MP5K_RED per 3 giorni , direi che è stato un successo !
A sto punto non so cosa volevi ottenere tu (visto che hai messo pure un Random nel tuo codice) ma direi che questo è un buon punto di partenza, fammi sapere.
Qui sotto il codice che ho usato io:
C++ Programming
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GameServer.Networking.Packets;
using GameServer.Virtual_Objects.User;
namespace GameServer.Networking.Handlers
{
class HANDLE_SHOP_COUPON : PacketHandler
{
public override void Handle(virtualUser User)
{
string ID = getBlock(0);
int Days = 0;
int CouponToRemove = 0;
string WeaponToBuy = null;
#region Calculate
switch (ID)
{
case "12345678-8765-4321": WeaponToBuy = "DB16"; Days = 3; CouponToRemove = 5; break;
case "22345678-8765-4321": WeaponToBuy = "DB33"; Days = 3; CouponToRemove = 5; break;
case "32345678-8765-4321": WeaponToBuy = "DB15"; Days = 3; CouponToRemove = 5; break;
case "42345678-8765-4321": WeaponToBuy = "DF71"; Days = 7; CouponToRemove = 15; break;
case "52345678-8765-4321": WeaponToBuy = "CI01"; Days = 7; CouponToRemove = 15; break;
case "62345678-8765-4321": WeaponToBuy = "DC76"; Days = 7; CouponToRemove = 15; break;
case "72345678-8765-4321": WeaponToBuy = "DD04"; Days = 14; CouponToRemove = 40; break;
case "82345678-8765-4321": WeaponToBuy = "DC07"; Days = 14; CouponToRemove = 40; break;
case "92345678-8765-4321": WeaponToBuy = "DG28"; Days = 14; CouponToRemove = 70; break;
default: User.disconnect(); break;
}
#endregion
if (User.Coupons >= CouponToRemove)
{
int InventorySlot = User.InventorySlots;
if (InventorySlot > 0)
{
User.Coupons -= CouponToRemove;
DB.runQuery("UPDATE users SET coupons='" + User.Coupons + "' WHERE id='" + User.UserID + "'");
if (WeaponToBuy == null) User.disconnect();
User.AddItem(WeaponToBuy, Days);
User.send(new PACKET_COUPON_BUY(WeaponToBuy, User));
User.send(new PACKET_COUPON_EVENT(User));
User.reloadCash();
}
else
{
User.send(new PACKET_ITEMSHOP(PACKET_ITEMSHOP.ErrorCodes.InventoryFull, "NULL"));
}
}
else
{
User.send(new PACKET_COUPON_BUY(PACKET_COUPON_BUY.ErrorCode.NotEnoughCoupons));
}
}
}
}