youssefabdelmanam
2019-07-12, 09:26 AM
السلام عليكم ورحمة الله وبركاته:emoji9:
طبعا احب اعرفكم بنفسي ابل منبتدي الشرح
معاكم اخوكم يوسف عبدو :)
طبعا انا جديد هنا في المنتدي ودي تعتبر ال موضوعاتي:D
للاسف انا معرفتش احط لوجو المنتدي في الموضوع عشان مش معاية
انا عارف اني رغاي فيلا نخش في الشرح علي طول ;)
دلوقتي انا جيبلكم كوستة بسيطة وهيا كوستة البحث عن الصندايق
طبعا دي كوستة بسيطة بس حبيت انزلها للناس عشان الي محتاجها
فكرة الكوستة انك مثلا بيجيلك رسالة في وقت محدد بيوديك عند ان بي سي الكوستة
بعد كدة بتدخل مابة كبيرة انت بقي تفضل تدور علي الصناديق ياما تكسب ايتم يا سبس يا جولد ياما تموت انت وحظك
بعد 10 دقايق من الكوستة بتخرج تلقأي يلا نخش في الاضافات
اول حاجة اعمل كلاس في اي مكان بأسم TreasureBox
بعد ضيف دا جواه
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using Mr_Panda.Client;
using Mr_Panda.Interfaces;
using Mr_Panda.Network.GamePackets;
namespace Mr_Panda.Game
{
public class TreasureBox
{
static Map Map = Kernel.Maps[3820];
const int MAX_BOXES = 20, ITEMS = 1000, CPSMoney = 1001, LEVEL = 1002, DEATH = 1003, STUN = 1004, KICK = 1005;
static int CurrentBoxes = 0;
static Mr_Panda.Interfaces.INpc npc;
static ushort tempX, tempY = 0;
static uint BaseId = 101002;
static List<Point> VaildOnes = new List<Point>();
public static bool OnGoing;
public static void Generate()
{
try
{
if (CurrentBoxes < MAX_BOXES)
{
if (Map == null)
{
Map = Kernel.Maps[3820];
return;
}
tempX = (ushort)Kernel.Random.Next(0, Map.Floor.Bounds.Width);
tempY = (ushort)Kernel.Random.Next(0, Map.Floor.Bounds.Height);
if (Map.Floor[tempX, tempY, MapObjectType.Item, null])
{
npc = new Network.GamePackets.NpcSpawn();
npc.UID = BaseId++;
npc.Mesh = (ushort)Kernel.RandFromGivingNums(9307, 9277, 9267, 9287, 9287, 9287 ,9257, 9257, 9257, 9257, 9257, 9257, 9307, 9307, 9307, 9307, 9307, 9277, 9267, 9267, 9267, 9277, 9277, 9277, 9277, 9277);
npc.Type = Enums.NpcType.Talker;
npc.MapID = Map.ID;
npc.X = tempX;
npc.Y = tempY;
Map.AddNpc(npc);
CurrentBoxes++;
Kernel.SendWorldMessage(new Message("A new treasure box appeared!", Color.Red, 2012));
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static void Reward(GameState client)
{
client.Player.CurrentTreasureBoxes++;
var orders = Kernel.GamePool.Values.OrderByDescending(x => x.Player.CurrentTreasureBoxes).ToArray();
for (int i = 0; i < orders.Length + 1; i++)
{
if (i == 11) break;
Message msg;
if (i == 0)
{
msg = new Message("", System.Drawing.Color.Red, Message.FirstRightCorner);
}
else
{
if (orders[i - 1].Player.CurrentTreasureBoxes == 0) continue;
msg = new Message("No " + i.ToString() + "- " + orders[i - 1].Player.Name + " Opened " + orders[i - 1].Player.CurrentTreasureBoxes.ToString() + " Boxes!", System.Drawing.Color.Red, Message.ContinueRightCorner);
}
Kernel.SendWorldMessage(msg, Program.GamePool, (ushort)3820);
}
int prize = 0;
if (client.Player.Level <= 135)
prize = Kernel.RandFromGivingNums(ITEMS, CPSMoney, KICK, ITEMS, CPSMoney, ITEMS, CPSMoney, DEATH);
else prize = Kernel.RandFromGivingNums(ITEMS, CPSMoney, KICK, ITEMS, CPSMoney, ITEMS, CPSMoney, DEATH);
//#warning TREASURE BOX PRIZE
switch (prize)
{
case CPSMoney:
{
uint amount = (uint)Kernel.Random.Next(10000000,100000000);
if (amount >= 1)
{
client.Player.ConquerPoints += amount;
Kernel.SendWorldMessage(new Message(client.Player.Name + " got " + amount.ToString() + " CPs while opening the TreasureBox!", Color.White, Message.Talk));
}
break;
}
case ITEMS:
{
Database.ConquerItemBaseInformation temp;
uint itemid = (uint)Kernel.RandFromGivingNums(188755, 192935, 192775, 187405, 188105, 188705, 188945, 188515, 192825, 200220, 187855, 200475, 187405, 187415, 187425, 3004124, 183325, 183495, 184305, 184315, 184375, 187305, 187315, 181395, 184405, 184365);
client.Inventory.Add(itemid, 0, 1);
Database.ConquerItemInformation.BaseInformations.T ryGetValue(itemid, out temp);
Kernel.SendWorldMessage(new Message(client.Player.Name + " got " + temp.Name + " while opening the TreasureBox!", Color.White, Message.Talk));
break;
}
case KICK:
{
client.Player.Teleport(1002, 338, 345);
Kernel.SendWorldMessage(new Message(client.Player.Name + " got KICKED-OUT! while opening the TreasureBox!", Color.White, Message.Talk));
break;
}
case DEATH:
{
client.Player.Die(client.Player);
Kernel.SendWorldMessage(new Message(client.Player.Name + " got Death! while opening the TreasureBox!", Color.White, Message.Talk));
break;
}
}
CurrentBoxes--;
client.Player.ConquerPoints += 100000;
//client.Entity.TreasuerPoints += 1;
}
}
}
بعد كدة تخش علي كلاس World.cs
وتبحث عن
private void WorldTournaments
وتضيف دا تحتها
#region TreasureBox
if ((Now64.Minute == 32) && (Now64.Second == 01))
{
TreasureBox.OnGoing = true;
for (int i = 0; i < 10; i++)
Game.TreasureBox.Generate();
Kernel.SendWorldMessage(new Message("The Lost TreasureBox event began!", Color.Red, Message.Center));
foreach (var client in Program.Values)
client.MessageBox("Lost treasure box event has started! Would you like to join? [Prize: 5kk or 1 kk CPs or more]",
(p) => { p.Player.Teleport(1002, 300, 229); }, null);
}
if (TreasureBox.OnGoing)
{
Game.TreasureBox.Generate();
}
if ((Now64.Minute == 37) && TreasureBox.OnGoing)
{
TreasureBox.OnGoing = false;
foreach (var client in Program.Values)
if (client.Player.MapID == 3820)
client.Player.Teleport(1002, 302, 286);
Kernel.SendWorldMessage(new Message("The Lost TreasureBox event ended!", Color.Red, Message.Center));
}
#endregion
ملحوظة: لو حبيت تعدل علي وقت الكوستة
هنا الوقت الي بيبدأ فيه الكوستة
if ((Now64.Minute == 32) && (Now64.Second == 01))
وهنا الوقت الي بينتهي فيه الكوستة وتخرج التون
if ((Now64.Minute == 37) && TreasureBox.OnGoing)
بعد كدة هتدخل علي كلاس Npc.cs
وتبحث عن
switch (client.ActiveNpc)
وتضيف دا تحتية
#region TreasureThief
case 16970:
{
switch (npcRequest.OptionID)
{
case 0:
{
dialog.Text("I have lost all my treasure boxes inside the DisCity map when I was doing the quest! now you'll need to find them for me!");
dialog.Option("Send me there.", 1);
dialog.Option("Meh!", 255);
dialog.Send();
break;
}
case 1:
{
if (TreasureBox.OnGoing)
{
client.Player.Teleport(3820, (ushort)Kernel.Random.Next(87, 212), (ushort)Kernel.Random.Next(114, 200));
}
else
{
dialog.Text("I can only send you there when it's xx:32 To xx:37 ");
dialog.Option("Oh I See!.", 255);
dialog.Send();
}
break;
}
}
break;
}
#endregion
بعد كدة تبحث في نفس الكلاس عن
if (client.ActiveNpc >= 101002
وتبدلها كلها بي دي
if (client.ActiveNpc >= 101002 && client.Player.MapID == 3820)
{
client.SendScreen(new Network.GamePackets.Data(true) { UID = client.ActiveNpc, ID = Network.GamePackets.Data.RemoveEntity }, true);
client.Map.RemoveNpc(client.Map.Npcs[client.ActiveNpc]);
Mr_Panda.Game.TreasureBox.Reward(client);
}
بعد كدة هتخش علي كلاس Entity.Cs
وتبحث عن
public class Entity : Writer,
وتضيف دا تحتية
public int CurrentTreasureBoxes = 0;
كدا خلصنا اضافات السي شارب نخش علي اضافات النافي كات
اضافة الان بي سي في الانافي كات
Npc
16970 TreasureBox 2 20337 1002 296 224
بص كدة معاية في اضافة المابة اول حاجة هتروح تضيف المابة دي لو لقيتها اصلا عندك امسها وضيف الي في الموضوع
عشان كلو يبقي شغال معاك تمام
10002 3820 65544 0
كدا تم الاتنهاء بفضل الله دعوه حلوه بقا ملحوظه الي هيطلع ايرور في Mr_Panda يبدلها في اسم البروجكت
والي هيجيلو ايرور في كلمة Player يبدلها بكلمة Entity ;)
وانتظروني في موضوعات اخري :D
والسلام عليكم ورحمة الله وبركاتة :emoji9:
طبعا احب اعرفكم بنفسي ابل منبتدي الشرح
معاكم اخوكم يوسف عبدو :)
طبعا انا جديد هنا في المنتدي ودي تعتبر ال موضوعاتي:D
للاسف انا معرفتش احط لوجو المنتدي في الموضوع عشان مش معاية
انا عارف اني رغاي فيلا نخش في الشرح علي طول ;)
دلوقتي انا جيبلكم كوستة بسيطة وهيا كوستة البحث عن الصندايق
طبعا دي كوستة بسيطة بس حبيت انزلها للناس عشان الي محتاجها
فكرة الكوستة انك مثلا بيجيلك رسالة في وقت محدد بيوديك عند ان بي سي الكوستة
بعد كدة بتدخل مابة كبيرة انت بقي تفضل تدور علي الصناديق ياما تكسب ايتم يا سبس يا جولد ياما تموت انت وحظك
بعد 10 دقايق من الكوستة بتخرج تلقأي يلا نخش في الاضافات
اول حاجة اعمل كلاس في اي مكان بأسم TreasureBox
بعد ضيف دا جواه
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using Mr_Panda.Client;
using Mr_Panda.Interfaces;
using Mr_Panda.Network.GamePackets;
namespace Mr_Panda.Game
{
public class TreasureBox
{
static Map Map = Kernel.Maps[3820];
const int MAX_BOXES = 20, ITEMS = 1000, CPSMoney = 1001, LEVEL = 1002, DEATH = 1003, STUN = 1004, KICK = 1005;
static int CurrentBoxes = 0;
static Mr_Panda.Interfaces.INpc npc;
static ushort tempX, tempY = 0;
static uint BaseId = 101002;
static List<Point> VaildOnes = new List<Point>();
public static bool OnGoing;
public static void Generate()
{
try
{
if (CurrentBoxes < MAX_BOXES)
{
if (Map == null)
{
Map = Kernel.Maps[3820];
return;
}
tempX = (ushort)Kernel.Random.Next(0, Map.Floor.Bounds.Width);
tempY = (ushort)Kernel.Random.Next(0, Map.Floor.Bounds.Height);
if (Map.Floor[tempX, tempY, MapObjectType.Item, null])
{
npc = new Network.GamePackets.NpcSpawn();
npc.UID = BaseId++;
npc.Mesh = (ushort)Kernel.RandFromGivingNums(9307, 9277, 9267, 9287, 9287, 9287 ,9257, 9257, 9257, 9257, 9257, 9257, 9307, 9307, 9307, 9307, 9307, 9277, 9267, 9267, 9267, 9277, 9277, 9277, 9277, 9277);
npc.Type = Enums.NpcType.Talker;
npc.MapID = Map.ID;
npc.X = tempX;
npc.Y = tempY;
Map.AddNpc(npc);
CurrentBoxes++;
Kernel.SendWorldMessage(new Message("A new treasure box appeared!", Color.Red, 2012));
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static void Reward(GameState client)
{
client.Player.CurrentTreasureBoxes++;
var orders = Kernel.GamePool.Values.OrderByDescending(x => x.Player.CurrentTreasureBoxes).ToArray();
for (int i = 0; i < orders.Length + 1; i++)
{
if (i == 11) break;
Message msg;
if (i == 0)
{
msg = new Message("", System.Drawing.Color.Red, Message.FirstRightCorner);
}
else
{
if (orders[i - 1].Player.CurrentTreasureBoxes == 0) continue;
msg = new Message("No " + i.ToString() + "- " + orders[i - 1].Player.Name + " Opened " + orders[i - 1].Player.CurrentTreasureBoxes.ToString() + " Boxes!", System.Drawing.Color.Red, Message.ContinueRightCorner);
}
Kernel.SendWorldMessage(msg, Program.GamePool, (ushort)3820);
}
int prize = 0;
if (client.Player.Level <= 135)
prize = Kernel.RandFromGivingNums(ITEMS, CPSMoney, KICK, ITEMS, CPSMoney, ITEMS, CPSMoney, DEATH);
else prize = Kernel.RandFromGivingNums(ITEMS, CPSMoney, KICK, ITEMS, CPSMoney, ITEMS, CPSMoney, DEATH);
//#warning TREASURE BOX PRIZE
switch (prize)
{
case CPSMoney:
{
uint amount = (uint)Kernel.Random.Next(10000000,100000000);
if (amount >= 1)
{
client.Player.ConquerPoints += amount;
Kernel.SendWorldMessage(new Message(client.Player.Name + " got " + amount.ToString() + " CPs while opening the TreasureBox!", Color.White, Message.Talk));
}
break;
}
case ITEMS:
{
Database.ConquerItemBaseInformation temp;
uint itemid = (uint)Kernel.RandFromGivingNums(188755, 192935, 192775, 187405, 188105, 188705, 188945, 188515, 192825, 200220, 187855, 200475, 187405, 187415, 187425, 3004124, 183325, 183495, 184305, 184315, 184375, 187305, 187315, 181395, 184405, 184365);
client.Inventory.Add(itemid, 0, 1);
Database.ConquerItemInformation.BaseInformations.T ryGetValue(itemid, out temp);
Kernel.SendWorldMessage(new Message(client.Player.Name + " got " + temp.Name + " while opening the TreasureBox!", Color.White, Message.Talk));
break;
}
case KICK:
{
client.Player.Teleport(1002, 338, 345);
Kernel.SendWorldMessage(new Message(client.Player.Name + " got KICKED-OUT! while opening the TreasureBox!", Color.White, Message.Talk));
break;
}
case DEATH:
{
client.Player.Die(client.Player);
Kernel.SendWorldMessage(new Message(client.Player.Name + " got Death! while opening the TreasureBox!", Color.White, Message.Talk));
break;
}
}
CurrentBoxes--;
client.Player.ConquerPoints += 100000;
//client.Entity.TreasuerPoints += 1;
}
}
}
بعد كدة تخش علي كلاس World.cs
وتبحث عن
private void WorldTournaments
وتضيف دا تحتها
#region TreasureBox
if ((Now64.Minute == 32) && (Now64.Second == 01))
{
TreasureBox.OnGoing = true;
for (int i = 0; i < 10; i++)
Game.TreasureBox.Generate();
Kernel.SendWorldMessage(new Message("The Lost TreasureBox event began!", Color.Red, Message.Center));
foreach (var client in Program.Values)
client.MessageBox("Lost treasure box event has started! Would you like to join? [Prize: 5kk or 1 kk CPs or more]",
(p) => { p.Player.Teleport(1002, 300, 229); }, null);
}
if (TreasureBox.OnGoing)
{
Game.TreasureBox.Generate();
}
if ((Now64.Minute == 37) && TreasureBox.OnGoing)
{
TreasureBox.OnGoing = false;
foreach (var client in Program.Values)
if (client.Player.MapID == 3820)
client.Player.Teleport(1002, 302, 286);
Kernel.SendWorldMessage(new Message("The Lost TreasureBox event ended!", Color.Red, Message.Center));
}
#endregion
ملحوظة: لو حبيت تعدل علي وقت الكوستة
هنا الوقت الي بيبدأ فيه الكوستة
if ((Now64.Minute == 32) && (Now64.Second == 01))
وهنا الوقت الي بينتهي فيه الكوستة وتخرج التون
if ((Now64.Minute == 37) && TreasureBox.OnGoing)
بعد كدة هتدخل علي كلاس Npc.cs
وتبحث عن
switch (client.ActiveNpc)
وتضيف دا تحتية
#region TreasureThief
case 16970:
{
switch (npcRequest.OptionID)
{
case 0:
{
dialog.Text("I have lost all my treasure boxes inside the DisCity map when I was doing the quest! now you'll need to find them for me!");
dialog.Option("Send me there.", 1);
dialog.Option("Meh!", 255);
dialog.Send();
break;
}
case 1:
{
if (TreasureBox.OnGoing)
{
client.Player.Teleport(3820, (ushort)Kernel.Random.Next(87, 212), (ushort)Kernel.Random.Next(114, 200));
}
else
{
dialog.Text("I can only send you there when it's xx:32 To xx:37 ");
dialog.Option("Oh I See!.", 255);
dialog.Send();
}
break;
}
}
break;
}
#endregion
بعد كدة تبحث في نفس الكلاس عن
if (client.ActiveNpc >= 101002
وتبدلها كلها بي دي
if (client.ActiveNpc >= 101002 && client.Player.MapID == 3820)
{
client.SendScreen(new Network.GamePackets.Data(true) { UID = client.ActiveNpc, ID = Network.GamePackets.Data.RemoveEntity }, true);
client.Map.RemoveNpc(client.Map.Npcs[client.ActiveNpc]);
Mr_Panda.Game.TreasureBox.Reward(client);
}
بعد كدة هتخش علي كلاس Entity.Cs
وتبحث عن
public class Entity : Writer,
وتضيف دا تحتية
public int CurrentTreasureBoxes = 0;
كدا خلصنا اضافات السي شارب نخش علي اضافات النافي كات
اضافة الان بي سي في الانافي كات
Npc
16970 TreasureBox 2 20337 1002 296 224
بص كدة معاية في اضافة المابة اول حاجة هتروح تضيف المابة دي لو لقيتها اصلا عندك امسها وضيف الي في الموضوع
عشان كلو يبقي شغال معاك تمام
10002 3820 65544 0
كدا تم الاتنهاء بفضل الله دعوه حلوه بقا ملحوظه الي هيطلع ايرور في Mr_Panda يبدلها في اسم البروجكت
والي هيجيلو ايرور في كلمة Player يبدلها بكلمة Entity ;)
وانتظروني في موضوعات اخري :D
والسلام عليكم ورحمة الله وبركاتة :emoji9: