Noticias:

SMF - Just Installed!

Menú principal

Source Windos Quest - System Quest

Publicado por Dakosmu, Mayo 22, 2024, 06:54 PM

Tema anterior - Siguiente tema

Dakosmu

Source Windos Quest - System Quest

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


stdafx.h

#define Dakosmu_QUEST    1

Crear los Elementos

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

DakosmuQuest.cpp

#include "stdafx.h"
#if Dakosmu_QUEST
#include "DakosmuQuest.h"
#include "Interface.h"
#include "Protocol.h"
#include "Item.h"
#include "Offset.h"
#include "Item.h"
#include "Defines.h"
#include "CustomMap.h"
#include "Common.h"
#include "Protect.h"
#include "Central.h"

// ----------------------------------------------------------------------------------------------

WinQuestDakosmu DakosmuQuestSystem;
// ----------------------------------------------------------------------------------------------


//████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
//█░░░░░░░░░░░░███░░░░░░░░░░░░░░█░░░░░░██░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░██████████░░░░░░█░░░░░░██░░░░░░█
//█░░▄▀▄▀▄▀▄▀░░░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░░░░░░░░░░░░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░░░▄▀▄▀░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░██░░▄▀░░░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀░░█████████░░▄▀░░░░░░▄▀░░░░░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀░░██░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░▄▀░░███░░▄▀░░██░░▄▀░░█░░░░░░░░░░▄▀░░█░░▄▀░░██░░░░░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░███░░▄▀░░██░░▄▀░░█████████░░▄▀░░█░░▄▀░░██████████░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░░░▄▀▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░░░█░░▄▀░░░░░░▄▀░░█░░░░░░░░░░▄▀░░█░░▄▀░░██████████░░▄▀░░█░░▄▀░░░░░░▄▀░░█
//█░░▄▀▄▀▄▀▄▀░░░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██████████░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█
//█░░░░░░░░░░░░███░░░░░░██░░░░░░█░░░░░░██░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░██████████░░░░░░█░░░░░░░░░░░░░░█
//████████████████████████████████████████████████████████████████████████████████████████████████████████████████████



WinQuestDakosmu::WinQuestDakosmu()
{
this->Init();
}
// ----------------------------------------------------------------------------------------------

WinQuestDakosmu::~WinQuestDakosmu()
{
// --
}
// ----------------------------------------------------------------------------------------------

void WinQuestDakosmu::Init()
{
// --
this->DrawMiniInfoFlag = false;
ZeroMemory(&this->ewdata, sizeof(this->ewdata));
}
// ----------------------------------------------------------------------------------------------

void WinQuestDakosmu::Load()
{
this->Init();
}
// ----------------------------------------------------------------------------------------------

void WinQuestDakosmu::ImageLoad()
{
pLoadImage("Custom\\Interface\\Party_info_block.tga", ex_INFO_2, 0x2601, 0x2900, 1, 0);
pLoadImage("Custom\\Interface\\newui_cha_textbox03.tga", ex_TEXT_BOX3, 0x2601, 0x2900, 1, 0);
}
// ----------------------------------------------------------------------------------------------

void WinQuestDakosmu::BindImages()
{
int eWHig;

eWHig = 423;
gInterface.BindObject(Dakosmu_WIN_QUEST_FINISH, 0x7A62, 90, 15.5, -1, -1); //Boton Accept Quest
gInterface.BindObject(Dakosmu_WIN_QUEST_MAIN, 0x7A5A, 222, eWHig, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_TITLE, 0x7A63, 230, 67, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_FRAME, 0x7A58, 230, 15, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_FOOTER, 0x7A59, 230, 50, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_DIV, 0x7A62, 223, 21, -1, -1); //Dividor lineas
gInterface.BindObject(Dakosmu_WIN_QUEST_CLOSE, 51522, 16, 16, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_TAB, 51522, 166, 22, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_TAB1, 51522, 70, 15, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_TAB2, 51522, 70, 15, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_TAB3, 51522, 70, 15, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_COUNT1, 0x7BAC, 168, 18, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_COUNT2, 0x7BAC, 168, 18, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_COUNT3, 0x7BAC, 168, 18, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_INFOBG, 0x7AA3, 170, 21, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_INFOBG2, 0x7AA1, 170, 22, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_LINE1, 0x7B67, 154, 3, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_POINT1, 0x7B68, 10, 10, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_INFO, ex_INFO_2, 22, 19, -1, -1);
gInterface.BindObject(Dakosmu_WIN_QUEST_INFOBG3, ex_TEXT_BOX3, 170, 21, -1, -1);
gInterface.BindObject(OPEN_QUEST, 0x7904, 25, 40, -1, -1);
}
// ----------------------------------------------------------------------------------------------

void WinQuestDakosmu::Draw()
{
if (!gInterface.Data[Dakosmu_WIN_QUEST_MAIN].OnShow)
{
return;
}

pSetCursorFocus = true;

pSetBlend(true);

int a = this->OpenTab;

// int Addradd = pWinWidth / pWinHeightReal / 2 - 320;
DWORD ItemNameColor = eWhite;
float MainWidth = 210.0;
float MainHeight = 400.0;
float StartY = ((MAX_WIN_HEIGHT - 51) / 2) - (MainHeight / 2);
float StartX = (MAX_WIN_WIDTH / 2) - (MainWidth / 2);
float MainCenter = StartX + (MainWidth / 3);
float ButtonX = MainCenter - (float)(29.0 / 2);

float ContentX = StartX;
float ContentY = StartY;

float TabX = StartX + 30;
float TabY = ContentY + 30 + 5;
float InfoX = 0;
float InfoY = 0;
int InfoA = 0;
int InfoM = 0;
int bColor = 0;
//--
gInterface.Data[Dakosmu_WIN_QUEST_MAIN].MaxX = StartX + MainWidth;
gInterface.Data[Dakosmu_WIN_QUEST_MAIN].MaxY = StartY + MainHeight;

gCentral.DrawDropBox(StartX, StartY, MainWidth, MainHeight, 0, 0);

gInterface.DrawFormat(eBlue250, (int)StartX, (int)StartY + 10, 210, 3, "Windows Quest");



gInterface.DrawGUI(Dakosmu_WIN_QUEST_CLOSE, StartX + MainWidth - gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].Width - 5, ContentY + 5);
gCentral.DrawDropBox(StartX + MainWidth - gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].Width - 5, ContentY + 5, 16, 16, 0, 0);
gInterface.DrawText603(eRed, StartX + MainWidth - gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].Width - 26, ContentY + 8, 60, 3, "X");
// ----
if (gInterface.IsWorkZone(Dakosmu_WIN_QUEST_CLOSE))
{
DWORD Color = eGray100;
// ----
if (gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].OnClick)
{
Color = eGray150;
}
// ----
gInterface.DrawColoredGUI(Dakosmu_WIN_QUEST_CLOSE, gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].X, gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].Y, Color);
gInterface.DrawToolTip(gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].X + 5, gInterface.Data[Dakosmu_WIN_QUEST_CLOSE].Y + 25, "Close");
}
// ------------------------------------
if (this->OpenTab == 0)
{
gInterface.DrawGUI(Dakosmu_WIN_QUEST_TAB1, TabX, TabY);
gCentral.DrawDropBox(TabX, TabY, 70, 15, 0, 0);

gInterface.DrawGUI(Dakosmu_WIN_QUEST_TAB2, TabX + 80, TabY);
gCentral.DrawDropBox(TabX + 80, TabY, 70, 15, 0, 0);
}
else if (this->OpenTab == 1)
{
gInterface.DrawGUI(Dakosmu_WIN_QUEST_TAB1, TabX, TabY);
gCentral.DrawDropBox(TabX, TabY, 70, 15, 0, 0);

gInterface.DrawGUI(Dakosmu_WIN_QUEST_TAB2, TabX + 80, TabY);
gCentral.DrawDropBox(TabX + 80, TabY, 70, 15, 0, 0);
}

if (this->ewdata[0].b_End)
{
gInterface.DrawText603(eRed, TabX + 2, TabY + 3, 60, 3, "Off");
}
else
{
gInterface.DrawText603(eGold, TabX + 2, TabY + 3, 60, 3, "first Quest");


}
if (this->ewdata[1].b_End)
{
gInterface.DrawText603(eRed, TabX + 80, TabY + 3, 60, 3, "Off");
}
else
{
gInterface.DrawText603(eGold, TabX + 82, TabY + 3, 60, 3, "second Quest");
}

// ------------------------------------
// -> End Quest
// ------------------------------------
if (this->ewdata[a].b_End)
{
float EndY = ContentY + 53;
gInterface.DrawGUI(Dakosmu_WIN_QUEST_INFOBG3, StartX + 30, EndY + 12);
gInterface.DrawText603(eAncient, ContentX + 30, EndY + 17, 170, 3, "End");
gInterface.Data[Dakosmu_WIN_QUEST_FINISH].Attribute = false;
return;
}
// ------------------------------------
// -> Content Need
// ------------------------------------
float NeededY = ContentY + 53;

gInterface.DrawText603(eAncient, ContentX + 20, TabY + 20, 180, 3, "%s", this->ewdata[a].NameQuest);

gCentral.DrawDropBox(StartX + 5, TabY + 37, 200, 0.5, 0, 0); // Divisor 1

gInterface.DrawText603(eAncient, ContentX + 20, TabY + 36, 170, 3, "Requisitos");

float CountNeededY = NeededY + 30;

gInterface.DrawText603(eWhite, StartX + 30, CountNeededY + 6, 100, 1, "Level:");

if (this->ewdata[a].b_Level)
{
bColor = eGold;
}
else
{
bColor = eRed;
}

gInterface.DrawText603(bColor, StartX + 60, CountNeededY + 6, 100, 1, "%d", this->ewdata[a].NeedLevel);
gInterface.DrawText603(eWhite, StartX + 90, CountNeededY + 6, 100, 1, "Reset:");

if (this->ewdata[a].b_Reset)
{
bColor = eGold;
}
else
{
bColor = eRed;
}

gInterface.DrawText603(bColor, StartX + 120, CountNeededY + 6, 100, 1, "%d", this->ewdata[a].NeedReset);
gInterface.DrawText603(eWhite, StartX + 150, CountNeededY + 6, 100, 1, "GReset:");

if (this->ewdata[a].b_Grand)
{
bColor = eGold;
}
else
{
bColor = eRed;
}

gInterface.DrawText603(bColor, StartX + 185, CountNeededY + 6, 100, 1, "%d", this->ewdata[a].NeedGrand);

CountNeededY += 21;
// ------------------------------------
// -> Content Mission
// ------------------------------------
float MissionX = StartX - 10;
float MissionY = ContentY + 53 + 40;

MissionY += 10;

float CountMissionY = MissionY + 20;

//----------------------------------------------------

for (int m = 0; m < EW_MAX_MISSION; m++)
{
if (this->ewdata[a].MissionType[m] == Hunting ||
this->ewdata[a].MissionType[m] == Droping ||
this->ewdata[a].MissionType[m] == Searching)
{
if (this->ewdata[a].b_Mission[m])
{
bColor = eExcellent;
}
else
{
bColor = eWhite;
}

CountMissionY += 10;

if (this->ewdata[a].MissionType[m] == Hunting)
{
if (this->ewdata[a].MissionID[m] == 65535)
{
gInterface.DrawText603(bColor, MissionX + 30 + 5 + 15, CountMissionY, 200, 1, "- Kill Level %d~%d: %d/%d",
this->ewdata[a].MissionOpt[m], this->ewdata[a].MissionExl[m], this->ewdata[a].Count[m], this->ewdata[a].MissionCount[m]);
}
else
{
gInterface.DrawText603(bColor, MissionX + 30 + 5 + 15, CountMissionY, 200, 1, "- %s: %d/%d", pGetMonsterName(this->ewdata[a].MissionID[m]/*gMonster.GetMonsterName(this->ewdata[a].MissionID[m]*/), this->ewdata[a].Count[m], this->ewdata[a].MissionCount[m]);
}
}
else if (this->ewdata[a].MissionType[m] == Droping)
{
gInterface.DrawText603(bColor, MissionX + 30 + 5 + 15, CountMissionY, 200, 1, "- %s: %d/%d", getItemName(GET_ITEM(this->ewdata[a].MissionID[m], this->ewdata[a].MissionIndex[m])), ewdata[a].Count[m], ewdata[a].MissionCount[m]);
}
else if (this->ewdata[a].MissionType[m] == Searching)
{
gInterface.DrawText603(bColor, MissionX + 30 + 5 + 15, CountMissionY, 200, 1, "- %s (%d)", getItemName(GET_ITEM(this->ewdata[a].MissionID[m], this->ewdata[a].MissionIndex[m])), this->ewdata[a].MissionCount[m]);
}
}
}
// ------------------------------------
// -> Content Reward
// ------------------------------------
float RewardY = ContentY + 53 + 100 + 42 + 15;

gCentral.DrawDropBox(StartX + 5, RewardY, 200, 0.5, 0, 0);

gInterface.DrawText603(eAncient, ContentX + 20, RewardY + 6, 170, 3, "Reward");

float CountRewardY = RewardY + 34 - 4;

for (int r = 0; r < EW_MAX_REWARD; r++)
{
if (this->ewdata[a].RewardType[r] == ewZen ||
this->ewdata[a].RewardType[r] == ewFreePoint ||
this->ewdata[a].RewardType[r] == ewItem ||
this->ewdata[a].RewardType[r] == ewBonus ||
this->ewdata[a].RewardType[r] == ewBuff)
{
if (this->ewdata[a].RewardType[r] == ewZen)
{
char RewardMSG[64] = { 0 };
gInterface.DrawText603(eWhite, StartX + 30 + 5, CountRewardY + 5, 100, 1, "Zen:");
pGetMoneyFormat((double)(int)this->ewdata[a].RewardCount[r], RewardMSG, 0);
gInterface.DrawText603(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", RewardMSG);
}
else if (this->ewdata[a].RewardType[r] == ewFreePoint)
{
gInterface.DrawFormat(eWhite, StartX + 30 + 5, CountRewardY + 5, 100, 1, "Lvl Point:");
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%d", this->ewdata[a].RewardCount[r]);
}
else if (this->ewdata[a].RewardType[r] == ewItem)
{

ItemBmdStruct* ItemInfo = pGetItemBmdStruct(ITEM(this->ewdata[a].RewardItemType[r], this->ewdata[a].RewardItemIndex[r]));


const int WidthValue = 24;
const int HeightValue = 26;
float barWidth = WidthValue * ItemInfo->ItemWidth;
float barHeight = HeightValue * ItemInfo->ItemHeight;

if (this->ewdata[a].RewardItemLevel[r] > 0)
{
gInterface.DrawText603(eGold, StartX + 20, CountRewardY + 5, 100, 3, "- %s +%d x%d",
getItemName(GET_ITEM(this->ewdata[a].RewardItemType[r], this->ewdata[a].RewardItemIndex[r])), this->ewdata[a].RewardItemLevel[r], this->ewdata[a].RewardCount[r]);
}
else
{
gInterface.DrawText603(eGold, StartX + 20, CountRewardY + 5, 100, 3, "- %s x %d",
getItemName(GET_ITEM(this->ewdata[a].RewardItemType[r], this->ewdata[a].RewardItemIndex[r])), this->ewdata[a].RewardCount[r]);
}

// ObjectItem* item_data = (ObjectItem*)&item__;

if (pCheckMouseOver((int)(StartX + 20), (int)(CountRewardY + 5), 100, 7))
{
NewModelRender3D(StartX + 155, ContentX + 40, barWidth, barHeight, GET_ITEM(this->ewdata[a].RewardItemType[r], this->ewdata[a].RewardItemIndex[r]), this->ewdata[a].RewardItemLevel[r], 1, 0, 0);

//Tooltip imcompleto
/* JCCoord B;

B.X = 196;
B.Y = (int)130;

sub_7E3E30(*(DWORD*)(GetInstance() + 308), B, (int)item_data, 0, 0, 0);

pSetBlend(false);*/
}
}
else if (this->ewdata[a].RewardType[r] == ewBonus)
{
gInterface.DrawFormat(eWhite, StartX + 30 + 5, CountRewardY + 5, 100, 1, "WCoin:");
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%d", this->ewdata[a].RewardCount[r]);
}
else if (this->ewdata[a].RewardType[r] == ewBuff)
{
gInterface.DrawText603(eWhite, StartX + 30 + 5, CountRewardY + 5, 100, 1, "Buff:");

switch (this->ewdata[a].RewardItemType[r])
{
case 1:
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", "Experience: + 15%%");
break;
case 2:
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", "Dmg: +10%%/Wizard Dmg: +10%%");
break;
case 3:
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", "Defence: +10%%");
break;
case 4:
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", "Exel Dmg Rate: +5%%/Ctcal Dmg Rate: +5%%");
break;
case 5:
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", "Zen Drop: +50%%");
break;
case 6:
gInterface.DrawFormat(eGold, StartX + 30 + 70, CountRewardY + 5, 100, 3, "%s", "Double Damage: +5%%");
break;
}
}

CountRewardY += 21;
}
}
// ------------------------------------
// -> Finish
// ------------------------------------
bool Finish = 0;

if (this->ewdata[a].Start)
{
Finish = this->ewdata[a].b_done;
}
else
{
Finish = this->ewdata[a].b_accept;
}

//------
if (gInterface.IsWorkZone(Dakosmu_WIN_QUEST_FINISH))
{
if (gInterface.Data[Dakosmu_WIN_QUEST_FINISH].OnClick)
{
gInterface.DrawButtonRender(Dakosmu_WIN_QUEST_FINISH, StartX + (MainWidth / 2) - (110 / 2), StartY + MainHeight - 32, 0, 28);
gCentral.DrawDropBox(StartX + (MainWidth / 2) - (110 / 2), StartY + MainHeight - 32, 108, 20, 0, 0);
}
else
{
gInterface.DrawButtonRender(Dakosmu_WIN_QUEST_FINISH, StartX + (MainWidth / 2) - (110 / 2), StartY + MainHeight - 32, 0, 0);
gCentral.DrawDropBox(StartX + (MainWidth / 2) - (110 / 2), StartY + MainHeight - 32, 108, 20, 0, 0);
}
}
else
{
gInterface.DrawButtonRender(Dakosmu_WIN_QUEST_FINISH, StartX + (MainWidth / 2) - (110 / 2), StartY + MainHeight - 32, 0, 0);
gCentral.DrawDropBox(StartX + (MainWidth / 2) - (110 / 2), StartY + MainHeight - 32, 108, 20, 0, 0);
}

if (this->ewdata[a].Start)
{

gInterface.DrawFormat(eWhite, StartX + (MainWidth / 2) - (70 / 2), StartY + MainHeight - 25, 59, 3, "Done");

}
else
{

gInterface.DrawFormat(eWhite, StartX + (MainWidth / 2) - (70 / 2), StartY + MainHeight - 25, 59, 3, "Accept");

}
//------
if (!Finish)
{
gInterface.Data[Dakosmu_WIN_QUEST_FINISH].Attribute = false;
}
else
{
// ----
gInterface.Data[Dakosmu_WIN_QUEST_FINISH].Attribute = true;
// ----
}

pSetBlend(false);
}

void WinQuestDakosmu::DrawMiniInfo()
{

try
{
if (gInterface.MiniMapCheck() || gInterface.CheckWindow(FullMap)
|| gInterface.CheckWindow(FriendList) || gInterface.CheckWindow(SkillTree)
|| gInterface.CheckWindow(CashShop) || gInterface.CheckWindow(FastMenu)
|| gInterface.CheckWindow(Character))
{
return;
}

/* if (gProtect.m_MainInfo.MiniMapType == 1)
{
if (MiniMap == 1)
{
return;
}
}
*/
int qCount = 0;
int mCount = 0;
bool DrInfo = false;

for (int a = 0; a < EW_MAX_ACT; a++)
{
if (this->ewdata[a].Start == TRUE)
{
qCount += 15;

for (int m = 0; m < EW_MAX_MISSION; m++)
{
if (this->ewdata[a].MissionType[m] == Hunting ||
this->ewdata[a].MissionType[m] == Droping ||
this->ewdata[a].MissionType[m] == Searching)
{
mCount += 10;
DrInfo = true;
}
}
}
}

if (DrInfo == false)
{

return;
}

float iX = 530; //posicion MiniInfoQuest
float iY = 320; //posicion MiniInfoQuest
float Wind = 100; //posicion MiniInfoQuest
float Hig = qCount + mCount;

float StartiY = 420; //posicion MiniInfoQuest

iY = StartiY - Hig;

pSetBlend(true);

pDrawColorButton(0x7980, iX, iY, Wind, Hig, NULL, NULL, Color4f(0, 0, 0, 100));

iY += 3;

for (int a = 0; a < EW_MAX_ACT; a++)
{
if (this->ewdata[a].Start == TRUE)
{
gInterface.DrawText603(eOrange, iX + 2, iY, 200, 2, "%s", this->ewdata[a].NameQuest);

for (int m = 0; m < EW_MAX_MISSION; m++)
{
if (this->ewdata[a].MissionType[m] == Hunting ||
this->ewdata[a].MissionType[m] == Droping ||
this->ewdata[a].MissionType[m] == Searching)
{
iY += 10;

if (this->ewdata[a].MissionType[m] == Hunting)
{
if (this->ewdata[a].MissionID[m] == 65535)
{
gInterface.DrawText603(eWhite, iX + 2, iY, 200, 2, "- Kill Level %d~%d: %d/%d",
this->ewdata[a].MissionOpt[m], this->ewdata[a].MissionExl[m], this->ewdata[a].Count[m], this->ewdata[a].MissionCount[m]);
}
else
{
gInterface.DrawText603(eWhite, iX + 2, iY, 200, 2, "- %s: %d/%d", pGetMonsterName(this->ewdata[a].MissionID[m]/*gMonster.GetMonsterName(this->ewdata[a].MissionID[m]*/), this->ewdata[a].Count[m], this->ewdata[a].MissionCount[m]);
}
}
else if (this->ewdata[a].MissionType[m] == Droping)
{
gInterface.DrawText603(eWhite, iX + 2, iY, 200, 2, "- %s: %d/%d", getItemName(GET_ITEM(this->ewdata[a].MissionID[m], this->ewdata[a].MissionIndex[m])), ewdata[a].Count[m], ewdata[a].MissionCount[m]);
}
else if (this->ewdata[a].MissionType[m] == Searching)
{
gInterface.DrawText603(eWhite, iX + 2, iY, 200, 2, "- %s (%d)", getItemName(GET_ITEM(this->ewdata[a].MissionID[m], this->ewdata[a].MissionIndex[m])), this->ewdata[a].MissionCount[m]);
}
}
}

iY += 15;
}
}

pSetBlend(false);
}
catch (...)
{
}
}
//// ----------------------------------------------------------------------------------------------
void WinQuestDakosmu::DrawOpenWQ()
{
if (gInterface.Data[OPEN_QUEST].OnShow)
{
gInterface.Data[OPEN_QUEST].OnShow = false;
}

if (gInterface.MiniMapCheck() || gInterface.CheckWindow(FullMap)
|| gInterface.CheckWindow(FriendList) || gInterface.CheckWindow(SkillTree)
|| gInterface.CheckWindow(CashShop) || gInterface.CheckWindow(FastMenu)
|| gInterface.CheckWindow(Character))
{
return;
}


//   int Addradd = pWinWidth / pWinHeightReal / 2 - 320;

gInterface.Data[OPEN_QUEST].OnShow = true;

gInterface.DrawGUI(OPEN_QUEST, 610, 200);

if (gInterface.IsWorkZone(OPEN_QUEST))
{
pSetCursorFocus = true; // Bloqueo de Cursor Al Señalar :)
gInterface.DrawToolTip(520, 210, "WINDOWS QUEST");
// ----
if (gInterface.Data[OPEN_QUEST].OnClick)
{
gInterface.DrawColoredGUI(OPEN_QUEST, 610, 200, pMakeColor(40, 20, 3, 130));
return;
}
// ----
gInterface.DrawColoredGUI(OPEN_QUEST, 610, 200, pMakeColor(255, 204, 20, 200));
}

}

//
int WinQuestDakosmu::Button(DWORD Event)
{
if (gInterface.ButtonEx(Event, OPEN_QUEST, false))
{
if (gInterface.MiniMapCheck() || gInterface.CheckWindow(FullMap)
|| gInterface.CheckWindow(FriendList) || gInterface.CheckWindow(SkillTree)
|| gInterface.CheckWindow(CashShop) || gInterface.CheckWindow(FastMenu)
|| gInterface.CheckWindow(Character))
{
return 0;
}

PMSG_CHARACTER_LIST_SEND pMsg;
pMsg.header.set(0xDE, 0x21, sizeof(pMsg));
DataSend((BYTE*)&pMsg, pMsg.header.size);
return true;
}

if (!gInterface.Data[Dakosmu_WIN_QUEST_MAIN].OnShow)
{
return false;
}

if (gInterface.ButtonEx(Event, Dakosmu_WIN_QUEST_FINISH, true))
{
this->CG_AcñeptQuest();

return true;
}
else if (gInterface.ButtonEx(Event, Dakosmu_WIN_QUEST_CLOSE, false))
{
pSetCursorFocus = false;
gInterface.Data[Dakosmu_WIN_QUEST_MAIN].Close();

return true;
}
else if (gInterface.ButtonEx(Event, Dakosmu_WIN_QUEST_TAB1, false))
{
this->OpenTab = 0;

return true;
}
else if (gInterface.ButtonEx(Event, Dakosmu_WIN_QUEST_TAB2, false))
{
this->OpenTab = 1;

return true;
}
else if (gInterface.ButtonEx(Event, Dakosmu_WIN_QUEST_TAB3, false))
{
this->OpenTab = 2;

return true;
}

return false;
}
//// ----------------------------------------------------------------------------------------------
//
void WinQuestDakosmu::GC_RecvMain(GC_MainPacket* aRecv)
{
for (int a = 0; a < EW_MAX_ACT; a++)
{
strncpy(this->ewdata[a].NameQuest, aRecv->xQuest[a].NameQuest, 25);
this->ewdata[a].b_accept = aRecv->xQuest[a].b_accept;
this->ewdata[a].b_done = aRecv->xQuest[a].b_done;
this->ewdata[a].b_End = aRecv->xQuest[a].b_End;
// -> user send
this->ewdata[a].Start = aRecv->xQuest[a].Start;
this->ewdata[a].Number = aRecv->xQuest[a].Number;
for (int m = 0; m < EW_MAX_MISSION; m++)
{
this->ewdata[a].Count[m] = aRecv->xQuest[a].Count[m];
}
// -> need send
this->ewdata[a].b_Level = aRecv->xQuest[a].b_Level;
this->ewdata[a].b_Reset = aRecv->xQuest[a].b_Reset;
this->ewdata[a].b_Grand = aRecv->xQuest[a].b_Grand;

this->ewdata[a].NeedLevel = aRecv->xQuest[a].NeedLevel;
this->ewdata[a].NeedReset = aRecv->xQuest[a].NeedReset;
this->ewdata[a].NeedGrand = aRecv->xQuest[a].NeedGrand;
// -> mission send
for (int m = 0; m < EW_MAX_MISSION; m++)
{
this->ewdata[a].b_Mission[m] = aRecv->xQuest[a].b_Mission[m];
this->ewdata[a].MissionType[m] = aRecv->xQuest[a].MissionType[m];
this->ewdata[a].MissionID[m] = aRecv->xQuest[a].MissionID[m];
this->ewdata[a].MissionIndex[m] = aRecv->xQuest[a].MissionIndex[m];
this->ewdata[a].MissionLevel[m] = aRecv->xQuest[a].MissionLevel[m];
this->ewdata[a].MissionLuck[m] = aRecv->xQuest[a].MissionLuck[m];
this->ewdata[a].MissionOpt[m] = aRecv->xQuest[a].MissionOpt[m];
this->ewdata[a].MissionExl[m] = aRecv->xQuest[a].MissionExl[m];
this->ewdata[a].MissionCount[m] = aRecv->xQuest[a].MissionCount[m];
this->ewdata[a].MissionProcent[m] = aRecv->xQuest[a].MissionProcent[m];
}
for (int r = 0; r < EW_MAX_REWARD; r++)
{

this->ewdata[a].RewardType[r] = aRecv->xQuest[a].RewardType[r];
this->ewdata[a].RewardCount[r] = aRecv->xQuest[a].RewardCount[r];
this->ewdata[a].RewardItemType[r] = aRecv->xQuest[a].RewardItemType[r];
this->ewdata[a].RewardItemIndex[r] = aRecv->xQuest[a].RewardItemIndex[r];
this->ewdata[a].RewardItemLevel[r] = aRecv->xQuest[a].RewardItemLevel[r];
}
}

if (aRecv->isOpenWindow)
{
if (!gInterface.Data[Dakosmu_WIN_QUEST_MAIN].OnShow)
{
this->SwitchStatsWindowState();
pSetCursorFocus = true;
}
}

}
//// ----------------------------------------------------------------------------------------------
//
void WinQuestDakosmu::CG_AcñeptQuest()
{
CG_Accept_Done pReq = { 0 };
pReq.h.set(0xDE, 0x0D, sizeof(pReq));
pReq.Result = this->OpenTab;
DataSend((LPBYTE)&pReq, pReq.h.size);
}
//// ----------------------------------------------------------------------------------------------
//
void WinQuestDakosmu::GC_MiniInfoRecv(GC_WinMiniInfo* aRecv)
{
for (int a = 0; a < EW_MAX_ACT; a++)
{
strncpy(this->ewdata[a].NameQuest, aRecv->xQuest[a].NameQuest, 25);

this->ewdata[a].Start = aRecv->xQuest[a].Start;

for (int m = 0; m < EW_MAX_MISSION; m++)
{
this->ewdata[a].Count[m] = aRecv->xQuest[a].WQuestCount[m];
this->ewdata[a].MissionType[m] = aRecv->xQuest[a].MissionType[m];
this->ewdata[a].MissionID[m] = aRecv->xQuest[a].MissionID[m];
this->ewdata[a].MissionIndex[m] = aRecv->xQuest[a].MissionIndex[m];
this->ewdata[a].MissionLevel[m] = aRecv->xQuest[a].MissionLevel[m];
this->ewdata[a].MissionLuck[m] = aRecv->xQuest[a].MissionLuck[m];
this->ewdata[a].MissionOpt[m] = aRecv->xQuest[a].MissionOpt[m];
this->ewdata[a].MissionExl[m] = aRecv->xQuest[a].MissionExl[m];
this->ewdata[a].MissionCount[m] = aRecv->xQuest[a].MissionCount[m];
}
}
}
//// ----------------------------------------------------------------------------------------------
//
void WinQuestDakosmu::GC_MiniInfoRecv(GC_WinMiniInfox* aRecv)
{
int a = aRecv->a;
int m = aRecv->m;

if (a < 0 || a >= EW_MAX_ACT)
{
return;
}

if (m < 0 && m >= EW_MAX_MISSION)
{
return;
}

this->ewdata[a].Count[m]++;
}
//// ----------------------------------------------------------------------------------------------
//
void WinQuestDakosmu::GC_Start(GC_WinStart* aRecv)
{
int a = aRecv->Act;
int s = aRecv->Start;

if (a < 0 || a >= EW_MAX_ACT)
{
return;
}

if (s == true)
{
this->ewdata[a].Start = true;
}
}
//// ----------------------------------------------------------------------------------------------
#endif

DakosmuQuest.h

#pragma once
// ----------------------------------------------------------------------------------------------
#if Dakosmu_QUEST
#include "stdafx.h"
#include "Protocol.h"
#include "Interface.h"
// ----------------------------------------------------------------------------------------------

#define EW_MAX_ACT 3
#define EW_MAX_MISSION 5
#define EW_MAX_REWARD 5
#define EW_MAX_QUEST 1000

#define ex_INFO_2 0xF91E
#define ex_TEXT_BOX3 0xF91F
// ----------------------------------------------------------------------------------------------

//████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
//█░░░░░░░░░░░░███░░░░░░░░░░░░░░█░░░░░░██░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░██████████░░░░░░█░░░░░░██░░░░░░█
//█░░▄▀▄▀▄▀▄▀░░░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░░░░░░░░░░░░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░░░▄▀▄▀░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░██░░▄▀░░░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀░░█████████░░▄▀░░░░░░▄▀░░░░░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀░░██░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░▄▀░░███░░▄▀░░██░░▄▀░░█░░░░░░░░░░▄▀░░█░░▄▀░░██░░░░░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░███░░▄▀░░██░░▄▀░░█████████░░▄▀░░█░░▄▀░░██████████░░▄▀░░█░░▄▀░░██░░▄▀░░█
//█░░▄▀░░░░▄▀▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░░░█░░▄▀░░░░░░▄▀░░█░░░░░░░░░░▄▀░░█░░▄▀░░██████████░░▄▀░░█░░▄▀░░░░░░▄▀░░█
//█░░▄▀▄▀▄▀▄▀░░░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██████████░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█
//█░░░░░░░░░░░░███░░░░░░██░░░░░░█░░░░░░██░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░██████████░░░░░░█░░░░░░░░░░░░░░█
//████████████████████████████████████████████████████████████████████████████████████████████████████████████████████




enum WinMission
{
Hunting = 1,
Droping = 2,
Searching = 3,
};
// ----------------------------------------------------------------------------------------------

enum WinReward
{
ewZen = 1,
ewFreePoint = 2,
ewItem = 3,
ewBonus = 4,
ewBuff = 5,
};
// ----------------------------------------------------------------------------------------------

struct WinQuest_Table
{
char NameQuest[25];
BYTE b_accept;
BYTE b_done;
BYTE b_End;
// -> User
BYTE Start;
WORD Number;
WORD Count[EW_MAX_MISSION];
//-> Need
BYTE b_Level;
WORD NeedLevel;
BYTE b_Reset;
WORD NeedReset;
BYTE b_Grand;
WORD NeedGrand;
//- >Mission
BYTE b_Mission[EW_MAX_MISSION];
BYTE MissionType[EW_MAX_MISSION];
WORD MissionID[EW_MAX_MISSION];
WORD MissionIndex[EW_MAX_MISSION];
BYTE MissionLevel[EW_MAX_MISSION];
BYTE MissionLuck[EW_MAX_MISSION]; //Luck|Map
BYTE MissionOpt[EW_MAX_MISSION];
BYTE MissionExl[EW_MAX_MISSION];
WORD MissionCount[EW_MAX_MISSION];
BYTE MissionProcent[EW_MAX_MISSION];
//-> Reward
WORD RewardType[EW_MAX_REWARD];
DWORD RewardCount[EW_MAX_REWARD];
WORD RewardItemType[EW_MAX_REWARD];
WORD RewardItemIndex[EW_MAX_REWARD];
WORD RewardItemLevel[EW_MAX_REWARD];
WORD RewardItemLuck[EW_MAX_REWARD];
WORD RewardItemOpt[EW_MAX_REWARD];
WORD RewardItemExl[EW_MAX_REWARD];
};
// ----------------------------------------------------------------------------------------------
struct GC_MainPacket
{
PSWMSG_HEAD h;
bool isOpenWindow;
WinQuest_Table xQuest[EW_MAX_ACT];
};
// ----------------------------------------------------------------------------------------------

struct CG_Accept_Done
{
PSBMSG_HEAD h;
BYTE Result;
};
// ----------------------------------------------------------------------------------------------

struct WinQuest_Mission
{
char NameQuest[25];
BYTE Start;
WORD WQuestCount[EW_MAX_MISSION];
BYTE MissionType[EW_MAX_MISSION];
WORD MissionID[EW_MAX_MISSION];
WORD MissionIndex[EW_MAX_MISSION];
BYTE MissionLevel[EW_MAX_MISSION];
BYTE MissionLuck[EW_MAX_MISSION];
BYTE MissionOpt[EW_MAX_MISSION];
BYTE MissionExl[EW_MAX_MISSION];
WORD MissionCount[EW_MAX_MISSION];
};
// ----------------------------------------------------------------------------------------------

struct GC_WinMiniInfo
{
PSWMSG_HEAD h;
WinQuest_Mission xQuest[EW_MAX_ACT];
};
// ----------------------------------------------------------------------------------------------

struct GC_WinMiniInfox
{
PSBMSG_HEAD h;
BYTE a;
BYTE m;
};
// ----------------------------------------------------------------------------------------------

struct GC_WinStart
{
PSBMSG_HEAD h;
BYTE Act;
BYTE Start;
};
// ----------------------------------------------------------------------------------------------

struct WinQuest_DATA
{
char NameQuest[25];
BYTE b_accept;
BYTE b_done;
BYTE b_End;
// -> User
BYTE Start;
WORD Number;
WORD Count[EW_MAX_MISSION];
//-> Need
BYTE b_Level;
WORD NeedLevel;
BYTE b_Reset;
WORD NeedReset;
BYTE b_Grand;
WORD NeedGrand;
//- >Mission
BYTE b_Mission[EW_MAX_MISSION];
BYTE MissionType[EW_MAX_MISSION];
WORD MissionID[EW_MAX_MISSION];
WORD MissionIndex[EW_MAX_MISSION];
BYTE MissionLevel[EW_MAX_MISSION];
BYTE MissionLuck[EW_MAX_MISSION];
BYTE MissionOpt[EW_MAX_MISSION];
BYTE MissionExl[EW_MAX_MISSION];
WORD MissionCount[EW_MAX_MISSION];
BYTE MissionProcent[EW_MAX_MISSION];
//-> Reward
WORD RewardType[EW_MAX_REWARD];
DWORD RewardCount[EW_MAX_REWARD];
WORD RewardItemType[EW_MAX_REWARD];
WORD RewardItemIndex[EW_MAX_REWARD];
WORD RewardItemLevel[EW_MAX_REWARD];
WORD RewardItemLuck[EW_MAX_REWARD];
WORD RewardItemOpt[EW_MAX_REWARD];
WORD RewardItemExl[EW_MAX_REWARD];
};
// ----------------------------------------------------------------------------------------------

class WinQuestDakosmu
{
public:
WinQuestDakosmu();
~WinQuestDakosmu();
void Init();
void Load();
void ImageLoad();
void BindImages();
void Draw();
void DrawMiniInfo();
void DrawOpenWQ();
int Button(DWORD Event);
void GC_RecvMain(GC_MainPacket* aRecv);
void CG_AcñeptQuest();
void GC_MiniInfoRecv(GC_WinMiniInfo* aRecv);
void GC_MiniInfoRecv(GC_WinMiniInfox* aRecv);
void GC_Start(GC_WinStart* aRecv);
void SwitchStatsWindowState() { (gInterface.Data[Dakosmu_WIN_QUEST_MAIN].OnShow == true) ? gInterface.Data[Dakosmu_WIN_QUEST_MAIN].Close() : gInterface.Data[Dakosmu_WIN_QUEST_MAIN].Open(-226, 20); };
int OpenTab;
int DrawMiniInfoFlag;

// MuObjectItemData item__;

WinQuest_DATA ewdata[EW_MAX_ACT];
};
extern WinQuestDakosmu DakosmuQuestSystem;
// ----------------------------------------------------------------------------------------------
#endif

Central.cpp

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Agregar

#if Dakosmu_QUEST
void Centralizado::DrawDropBox(float PosX, float PosY, float Width, float Height, float Arg5, int Arg6)
{
EnableAlphaTest(1);

glColor4f(0.0, 0.0, 0.0, 0.80000001);
pDrawBarForm(PosX, PosY, Width, Height, Arg5, Arg6); //central

float RightX = PosX - 8.0f;
float LeftX = (PosX + Width) - 8.0f;
float TopY = PosY - 8.0f;
float DownY = (PosY + Height) - 8.0f;
bool horizontal = true;
bool vertical = true;
//--
float IniciarX = PosX - 8.0f;
float w = 16.0f;
//--
float IniciarY = PosY - 8.0f;
float H = 16.0f;

pSetBlend(true);
glColor3f(1.0, 1.0, 1.0);

while (vertical || horizontal)
{
if (vertical)
{
IniciarX += 16.0f;

if ((IniciarX + w) > LeftX)
{
vertical = false;
w = LeftX - IniciarX;
}
pDrawGUI(61512, IniciarX, TopY + 8.0, w, 8.0f); //arriba

pDrawGUI(61517, IniciarX, DownY, w, 8.0f); //abajo
}
//-- abajo
if (horizontal)
{
IniciarY += 16.0f;

if ((IniciarY + H) > DownY)
{
horizontal = false;
H = DownY - IniciarY;
}

pDrawGUI(61514, RightX + 8.0, IniciarY, 8.0f, H); // Lado Izquierdo

pDrawGUI(61515, LeftX, IniciarY, 8.0f, H); //Lado Derecho
}
}

pDrawGUI(61511, RightX + 8.0, TopY + 8.0, 8.0f, 8.0f); //esquina arriba izquierda

pDrawGUI(61513, LeftX, TopY + 8.0, 8.0f, 8.0f); //esquina arriba derecha

pDrawGUI(61516, RightX + 8.0, DownY, 8.0f, 8.0f);  //esquina abajo izquierda

pDrawGUI(61518, LeftX, DownY, 8.0f, 8.0f);  //esquina abajo derecha

pGLSwitch();
EnableAlphaTest(0);
}
#endif


Central.h

Dentro de class Centralizado dentro de Public Agregar


#if Dakosmu_QUEST
void DrawDropBox(float PosX, float PosY, float Width, float Height, float Arg5, int Arg6); // ya estaria aver copila
#endif



Controller.cpp


#if Dakosmu_QUEST
#include "DakosmuQuest.h"
#endif

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Buscar (wParam);

Agregar

#if Dakosmu_QUEST
DakosmuQuestSystem.Button(wParam); // donde esta central
#endif


Item.cpp

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Agregar al final del codigo


#if Dakosmu_QUEST
char* getItemName(int ItemID)
{
ItemBmdStruct* ItemInfo = pGetItemBmdStruct(ItemID);

return ItemInfo->Name;
}
#endif


Item.h

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Agregar al Final del Codigo

#if Dakosmu_QUEST
char* getItemName(int ItemID);
#endif



Protocl.cpp

#if Dakosmu_QUEST
#include "DakosmuQuest.h"
#endif

Buscar case 0xFB:

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

#if Dakosmu_QUEST
case 0x10:
DakosmuQuestSystem.GC_MiniInfoRecv((GC_WinMiniInfox*)lpMsg); //0xFD, 0x13
return 1;
case 0x11:
DakosmuQuestSystem.GC_Start((GC_WinStart*)lpMsg); //0xFD, 0x14
return 1;
case 0x14:
DakosmuQuestSystem.GC_RecvMain((GC_MainPacket*)lpMsg); //0xFF, 0x0C
return 1;
case 0x13:
DakosmuQuestSystem.GC_MiniInfoRecv((GC_WinMiniInfo*)lpMsg); //0xFF, 0x0D
return 1;
#endif






































Bon Dia

Dakosmu

#1
Interface.cpp

#if Dakosmu_QUEST
#include "DakosmuQuest.h"
#endif

Buscar this->BindObject

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Agregar

#if Dakosmu_QUEST
    DakosmuQuestSystem.BindImages();
#endif


Buscar pLoadImage("Custom\\

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Agregar

#if Dakosmu_QUEST
    DakosmuQuestSystem.ImageLoad();
#endif

Agregar estos Codigos

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

#if Dakosmu_QUEST
void Interface::DrawText603(DWORD Color, int PosX, int PosY, int Width, int Align, LPCSTR Text, ...) // OK
{
    char Buff[2048];
    const int BuffLen = sizeof(Buff) - 1;
    ZeroMemory(Buff, BuffLen);

    va_list args;
    va_start(args, Text);
    vsprintf_s(Buff, BuffLen, Text, args);
    va_end(args);

    char* Line = strtok(Buff, "\n");

    while (Line != nullptr)
    {
        DrawInterfaceText(Line, PosX, PosY, Width, 0, Color, 0, Align);
        PosY += 10;
        Line = strtok(NULL, "\n");
    }
}
#endif
#if Dakosmu_QUEST
void NewModelRender3D(float x, float y, float Width, float Height, int ItemID, int Level, int Excl, int Anc, bool OnMouse) // code hien thi item
{
    glMatrixMode(0x1701);
    glPushMatrix();
    glLoadIdentity();

    glViewport2(0, 0, *(GLsizei*)MAIN_RESOLUTION_X, *(GLsizei*)MAIN_RESOLUTION_Y);
    float v2 = *(float*)MAIN_RESOLUTION_X / *(float*)MAIN_RESOLUTION_Y;

    gluPerspective2(1.0, v2, *(float*)0xE61E38, *(float*)0xE61E3C);
    glMatrixMode(0x1700u);
    glPushMatrix();
    glLoadIdentity();
    GetOpenGLMatrix(0x87933A0);
    EnableDepthTest();
    EnableDepthMask();

    RenderItem3D(x, y, Width, Height, ItemID, Level, Excl, Anc, OnMouse);

    glMatrixMode(0x1700u);
    glPopMatrix();
    glMatrixMode(0x1701u);
    glPopMatrix();

    glColor4f((GLfloat)1.0, (GLfloat)1.0, (GLfloat)1.0, (GLfloat)1.0);
    pSetBlend(false);
}
#endif
#if Dakosmu_QUEST
bool Interface::ButtonEx(DWORD Event, int ButtonID, bool Type)
{
    if (!this->IsWorkZone3(ButtonID))
    {
        return false;
    }

    if (Type == true)
    {
        if (!this->Data[ButtonID].Attribute)
        {
            return false;
        }
    }

    // ----
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[ButtonID].EventTick);
    // ----

    if (Event == WM_LBUTTONDOWN && this->Data[ButtonID].OnClick == false)
    {
        this->Data[ButtonID].OnClick = true;
        //return false;
    }

    if (Event == WM_LBUTTONUP && this->Data[ButtonID].OnClick == true)
    {
        this->Data[ButtonID].OnClick = false;
        return true;
    }
    // ----
    if (Delay < 500)
    {
        return false;
    }
    // ----
    this->Data[ButtonID].OnClick = false;
    // ----
    this->Data[ButtonID].EventTick = GetTickCount();
    // ----
    return false;
}

#endif
#if Dakosmu_QUEST
bool Interface::IsWorkZone3(short ObjectID)
{
    float PosX = this->Data[ObjectID].X;
    float MaxX = PosX + this->Data[ObjectID].Width;
    // ----
    if ((gObjUser.m_CursorX < PosX || gObjUser.m_CursorX > MaxX)
        || (gObjUser.m_CursorY < this->Data[ObjectID].Y || gObjUser.m_CursorY > this->Data[ObjectID].MaxY))
    {
        return false;
    }
    // ----
    return true;
}
#endif


Interface.h

Agregar Dentro de enum ObjectID

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

#if Dakosmu_QUEST
Dakosmu_WIN_QUEST_MAIN,
Dakosmu_WIN_QUEST_TITLE,
Dakosmu_WIN_QUEST_FRAME,
Dakosmu_WIN_QUEST_FOOTER,
Dakosmu_WIN_QUEST_DIV,
Dakosmu_WIN_QUEST_CLOSE,
Dakosmu_WIN_QUEST_TAB,
Dakosmu_WIN_QUEST_TAB1,
Dakosmu_WIN_QUEST_TAB2,
Dakosmu_WIN_QUEST_TAB3,
Dakosmu_WIN_QUEST_FINISH,
Dakosmu_WIN_QUEST_COUNT1,
Dakosmu_WIN_QUEST_COUNT2,
Dakosmu_WIN_QUEST_COUNT3,
Dakosmu_WIN_QUEST_INFOBG,
Dakosmu_WIN_QUEST_INFOBG2,
Dakosmu_WIN_QUEST_LINE1,
Dakosmu_WIN_QUEST_POINT1,
Dakosmu_WIN_QUEST_INFO,
Dakosmu_WIN_QUEST_INFOBG3,
OPEN_QUEST,
#endif

Agregar este codigo

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

#if Dakosmu_QUEST
void NewModelRender3D(float x, float y, float Width, float Height, int ItemID, int Level = 0, int Excl = 0, int Anc = 0, bool OnMouse = 0);
#endif


Agregar dentro de class Interface en Public

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

#if Dakosmu_QUEST
bool ButtonEx(DWORD Event, int ButtonID, bool Type);
bool IsWorkZone3(short ObjectID);
        void        DrawText603(DWORD Color, int PosX, int PosY, int Width, int Align, LPCSTR Text, ...);
#endif



Bon Dia

Dakosmu

MuServer\Data\Custom\WinQuest

CreationQuestData_1.ini

//======================================================================
//         INFORMATION
//----------------------------------------------------------------------
//      Level    Reset   GReset    Quest_Name
//======================================================================
//  MISSION
//----------------------------------------------------------------------
//     1     Mob     -/-    -/-     Map    MobMin    MobMax   -/-    Count
//----------------------------------------------------------------------
//     2     ID     Index   Level   Map    MobMin    MobMax   Procent  Count
//----------------------------------------------------------------------
//     3     ID     Index   Level  Luck   opt        Exl        -/-     Count
//=======================================================================
//   REWARD
//-----------------------------------------------------------------------
//     1-Zen     -/-   -/-   -/-   -/-  -/-   -/-   Count
//-----------------------------------------------------------------------
//     2-Point   -/-   -/-   -/-   -/-  -/-   -/-   Count
//-----------------------------------------------------------------------
//     3-Item   Type  Index  Level  Luck  Opt  Excl  Count
//-----------------------------------------------------------------------
//     4-Bonu     -/-   -/-   -/-   -/-  -/-   -/-   Count
//-----------------------------------------------------------------------
//     5-Buff    1-6   -/-   -/-   -/-  -/-   -/-   Count
//========================================================================

//************************************************************************
//   EXAMPLE QUEST
//************************************************************************
//      Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
//        1        0        0     "Kill Monster"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
//    1    24     0     0     0     0     0     0    50  //Matar 50 monster
//    2    12     15    0     4     0     0     10    1  //Buscar 1 chaos en losttower
//    3    14     14    0     0     0     0     0     0  //Tener 1 soul en el inv.
//    0     0      0    0     0     0     0     0     0  //en blanco
//    0     0      0    0     0     0     0     0     0  //en blanco
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
//   3    12     36    15    1     1     1      1
//*************************************************************************



//************************************************************************
//   QUEST 1
//************************************************************************
//    Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
        6        0        0     "Budge Dragon(Lorencia)"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
    1     2     0     0     0     0     0     0    60  //Matar 60 monster
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
      3    7     1     15     1     1     1     1  //set dragon
      3    8     1     15     1     1     1     1  //set dragon
      3    9     1     15     1     1     1     1  //set dragon
      3    10     1     15     1     1     1     1  //set dragon
      3    11     1     15     1     1     1     1  //set dragon
//*************************************************************************


//************************************************************************
//   QUEST 2
//************************************************************************
//    Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
        1        0        0     "Kill Worm(Devias)"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
    1    2     0     0     2     0     0     0    60  //Matar 60 monster
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
      3    12     32     0     0     0     0     1  //Box of Loot[Low]
      0    0     0     0     0     0     0     0  //nada
      0    0     0     0     0     0     0     0  //nada
      0    0     0     0     0     0     0     0  //nada
      0    0     0     0     0     0     0     0  //nada
//*************************************************************************


//************************************************************************
//   QUEST 3
//************************************************************************
//    Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
        1        0        0     "Kill Ice Monster(Devias)"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
    1    2     0     0     2     0     0     0    80  //Matar 80 monster
    3    12     15    0     0     0     0     0    2   //Tener 1 chaos en el inv.
    3    14     14    0     0     0     0     0     3  //Tener 1 soul en el inv.
    3    14     13    0     0     0     0     0     4  //Tener 1 bless en el inv.
    3    14     16    0     0     0     0     0     1  //Tener 1 life en el inv.
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
      3    7     1     15     1     1     1     1  //set dragon
      3    8     1     15     1     1     1     1  //set dragon
      3    9     1     15     1     1     1     1  //set dragon
      3    10     1     15     1     1     1     1  //set dragon
      3    11     1     15     1     1     1     1  //set dragon
//*************************************************************************


//************************************************************************
//   QUEST 4
//************************************************************************
//    Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
        1        0        0     "Kill Hommerd(Devias)"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
    1    2     0     0     2     0     0     0    100  //Matar 80 monster
    3    14     15    0     0     0     0     0    0   //Tener 1 chaos en el inv.
    3    14     14    0     0     0     0     0     0  //Tener 1 soul en el inv.
    3    14     13    0     0     0     0     0     0  //Tener 1 bless en el inv.
    3    14     16    0     0     0     0     0     0  //Tener 1 life en el inv.
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
      3    12     37     15     1     1     1     1  //Wing of angel
      0    0     0     0     0     0     0     0  //nada
      0    0     0     0     0     0     0     0  //nada
      0    0     0     0     0     0     0     0  //nada
      0    0     0     0     0     0     0     0  //nada
//*************************************************************************


CreationQuestData_2.ini

//======================================================================
//         INFORMATION
//----------------------------------------------------------------------
//      Level    Reset   GReset    Quest_Name
//======================================================================
//  MISSION
//----------------------------------------------------------------------
//     1     Mob     -/-    -/-     Map    MobMin    MobMax   -/-    Count
//----------------------------------------------------------------------
//     2     ID     Index   Level   Map    MobMin    MobMax   Procent  Count
//----------------------------------------------------------------------
//     3     ID     Index   Level  Luck   opt        Exl        -/-     -/-
//=======================================================================
//   REWARD
//-----------------------------------------------------------------------
//     1-Zen     -/-   -/-   -/-   -/-  -/-   -/-   Count
//-----------------------------------------------------------------------
//     2-Point   -/-   -/-   -/-   -/-  -/-   -/-   Count
//-----------------------------------------------------------------------
//     3-Item   Type  Index  Level  Luck  Opt  Excl  Count
//-----------------------------------------------------------------------
//     4-Bonu     -/-   -/-   -/-   -/-  -/-   -/-   Count
//-----------------------------------------------------------------------
//     5-Buff    1-6   -/-   -/-   -/-  -/-   -/-   Count
//========================================================================

//************************************************************************
//   EXAMPLE QUEST
//************************************************************************
//      Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
//        1        0        0     "Kill Monster"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
//    1    24     0     0     2     0     0     0    50  //Matar 50 monster
//    2    12     15    0     4     0     0     10    1  //Buscar 1 chaos en losttower
//    3    14     14    0     0     0     0     0     0  //Tener 1 soul en el inv.
//    0     0      0    0     0     0     0     0     0  //en blanco
//    0     0      0    0     0     0     0     0     0  //en blanco
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
//   3    12     36    15    1     1     1      1
//*************************************************************************


//************************************************************************
//   QUEST 1
//************************************************************************
//    Level    Reset   GReset    Quest_Name
//------------------------------------------------------------------------
        6        0        0     "Budge Dragon(Lorencia)"
//------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8    #9
//------------------------------------------------------------------------
    1     2     0     0     0     0     0     0    60  //Matar 60 monster
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
    0     0      0    0     0     0     0     0     0  //en blanco
//-------------------------------------------------------------------------
//   #1    #2    #3    #4    #5    #6    #7    #8
//-------------------------------------------------------------------------
      1    0     0     0     0     0     0     10000000  //zen
//*************************************************************************


CreationQuestDrop

//------------------------------------------------------------------------------------------------------------------------------
//   Act   NeedQuest   Type   Index   iMinLvl   iMaxLvl   Opt   Luck   Skill   Exc   Dur   DropRate   mMinLvl   mMaxLvl   mMap
//------------------------------------------------------------------------------------------------------------------------------
   1   1      14   14   0   0   0   0   0   0   0   0      0   200   -1
end

CreationQuestSystem.ini

[Common]
// -------------------------------------------------------------------------------
Enable = 1 ; Active 1/0
// -------------------------------------------------------------------------------
NPC_Class = 229
NPC_Map = 2
NPC_X = 183
NPC_Y = 30
// -------------------------------------------------------------------------------
Bon Dia

Dakosmu

Update31 - QuestSystem.SQL


USE [MuOnline]
GO

/****** Object:  Table [dbo].[QuestSystem]    Script Date: 08/24/2022 19:06:08 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[QuestSystem](
[AccountID] [varchar](10) NOT NULL,
[Name] [varchar](10) NOT NULL,
[QuestStart_1] [int] NOT NULL,
[QuestNum_1] [int] NOT NULL,
[QuestCount1_1] [int] NOT NULL,
[QuestCount2_1] [int] NOT NULL,
[QuestCount3_1] [int] NOT NULL,
[QuestCount4_1] [int] NOT NULL,
[QuestCount5_1] [int] NOT NULL,
[QuestStart_2] [int] NOT NULL,
[QuestNum_2] [int] NOT NULL,
[QuestCount1_2] [int] NOT NULL,
[QuestCount2_2] [int] NOT NULL,
[QuestCount3_2] [int] NOT NULL,
[QuestCount4_2] [int] NOT NULL,
[QuestCount5_2] [int] NOT NULL,
[QuestStart_3] [int] NOT NULL,
[QuestNum_3] [int] NOT NULL,
[QuestCount1_3] [int] NOT NULL,
[QuestCount2_3] [int] NOT NULL,
[QuestCount3_3] [int] NOT NULL,
[QuestCount4_3] [int] NOT NULL,
[QuestCount5_3] [int] NOT NULL,
 CONSTRAINT [PK_QuestSystem] PRIMARY KEY CLUSTERED
(
[Name] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestStart_1]  DEFAULT ((0)) FOR [QuestStart_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestNum_1]  DEFAULT ((0)) FOR [QuestNum_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount1_1]  DEFAULT ((0)) FOR [QuestCount1_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount2_1]  DEFAULT ((0)) FOR [QuestCount2_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount3_1]  DEFAULT ((0)) FOR [QuestCount3_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount4_1]  DEFAULT ((0)) FOR [QuestCount4_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount5_1]  DEFAULT ((0)) FOR [QuestCount5_1]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestStart_2]  DEFAULT ((0)) FOR [QuestStart_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestNum_2]  DEFAULT ((0)) FOR [QuestNum_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount1_2]  DEFAULT ((0)) FOR [QuestCount1_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount2_2]  DEFAULT ((0)) FOR [QuestCount2_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount3_2]  DEFAULT ((0)) FOR [QuestCount3_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount4_2]  DEFAULT ((0)) FOR [QuestCount4_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount5_2]  DEFAULT ((0)) FOR [QuestCount5_2]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestStart_3]  DEFAULT ((0)) FOR [QuestStart_3]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestNum_3]  DEFAULT ((0)) FOR [QuestNum_3]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount1_3]  DEFAULT ((0)) FOR [QuestCount1_3]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount2_3]  DEFAULT ((0)) FOR [QuestCount2_3]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount3_3]  DEFAULT ((0)) FOR [QuestCount3_3]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount4_3]  DEFAULT ((0)) FOR [QuestCount4_3]
GO

ALTER TABLE [dbo].[QuestSystem] ADD  CONSTRAINT [DF_QuestSystem_QuestCount5_3]  DEFAULT ((0)) FOR [QuestCount5_3]
GO

Bon Dia


beibei

The small return task is not saved, and it needs to be picked up again, please ask where the problem is, thank you very much for the guidance

Dakosmu

Cita de: beibei en Jul 11, 2024, 02:46 AMThe small return task is not saved, and it needs to be picked up again, please ask where the problem is, thank you very much for the guidance

gracias voy a revisar la guia

y Mejorar
Bon Dia

Dakosmu

Bon Dia

🡱 🡳