Kết quả 1 đến 10 của 50
Chủ đề: Source code - Hàm Say version 2
-
29-01-13, 06:41 AM #1
- Ngày tham gia
- Jun 2007
- Đang ở
- Thiên đường đã lỡ...
- Bài viết
- 217
- Thanks
- 14
- Thanked 183 Times in 73 Posts
Source code - Hàm Say version 2
Dear All!
Hôm nay mình xin hướng dẫn source newbie làm bảng Say2 (nói chuyện có hình).
[Only registered and activated users can see links. ]
Đầu tiên thì các bạn cần thiết lập file ini trong thư mục Ui\UI3\ cho phù hợp với source của các bạn.
Tiếp theo tạo ra 2 file UiMsgSel2.h và và UiMsgSel2.cpp bằng cách copy từ file gốc UiMsgSel.h và UiMsgSel.cpp, replace cụm từ uimsgsel bằng uimsgsel2.
Bây giờ tiến hành làm:
1.File \JX\swrod3\SwordOnline\Sources\Core\Src\GameDataDe f.h
Gần struct KUiQuestionAndAnswer thêm:
PHP Code:struct KUiNpcSpr
{
char ImageFile[128];
unsigned short MaxFrame;
};
Tìm struct PLAYER_SCRIPTACTION_SYNC thêm 1 biến m_Select
PHP Code:typedef struct
{
BYTE ProtocolType;
WORD m_wProtocolLong;
BYTE m_nOperateType; //操作类型
BYTE m_bUIId, m_bOptionNum, m_bParam1, m_bParam2, m_Select;// chỉ thêm 1 biến ở dòng này
int m_nParam;
int m_nBufferLen;
char m_pContent[MAX_SCIRPTACTION_BUFFERNUM]; //带控制符
} PLAYER_SCRIPTACTION_SYNC;
Tìm và thêm 1 hàm vào gần hàm Say như thế này:
PHP Code:{"Say", LuaSelectUI},
{"Say2", LuaSaySPR},
Tại hàm LuaSelectUI Tìm và thêm biến mới tạo lúc nãy vào như thế này:
PHP Code:PLAYER_SCRIPTACTION_SYNC UiInfo;
UiInfo.m_bUIId = UI_SELECTDIALOG;
UiInfo.m_bParam1 = nDataType;//主信息的类型,字符串(0)或数字(1)
UiInfo.m_bOptionNum = nOptionNum;
UiInfo.m_nOperateType = SCRIPTACTION_UISHOW;
UiInfo.m_Select = 0; //Từ nay 0 là Say, 1 là Say2
PHP Code:PLAYER_SCRIPTACTION_SYNC UiInfo;
UiInfo.m_bUIId = UI_SELECTDIALOG;
UiInfo.m_bParam1 = nDataType;//主信息的类型,字符串(0)或数字(1)
UiInfo.m_bOptionNum = nOptionNum;
UiInfo.m_nOperateType = SCRIPTACTION_UISHOW;
UiInfo.m_Select = 1; //Say2
4.File \JX\swrod3\SwordOnline\Sources\Core\Src\KPlayer.h
Tìm chỗ nào có public: thì thêm biến vào:
PHP Code:#ifndef _SERVER
int m_nImageNpcID; //id npc
#endif
Hàm void KPlayer::Release()
PHP Code:void KPlayer::Release()
{
#ifndef _SERVER
m_RunStatus = 0;
m_dwNextLevelLeadExp = 0;
m_nLeftSkillID = 0;
m_nLeftSkillLevel = 0;
m_nRightSkillID = 0;
m_nRightSkillLevel = 0;
m_nSendMoveFrames = defMAX_PLAYER_SEND_MOVE_FRAME;
m_MouseDown[0] = FALSE;
m_MouseDown[1] = FALSE;
m_nImageNpcID = 0; //khởi tạo
#endif
PHP Code:void KPlayer::FindSelectNpc(int x, int y, int nRelation)
{
int nNpcIdx = 0;
nNpcIdx = NpcSet.SearchNpcAt(x, y, nRelation, 40);
if (nNpcIdx)
{
m_nPeapleIdx = nNpcIdx;
m_nImageNpcID = nNpcIdx; // chỉ thêm có dòng này thui
}
else
m_nPeapleIdx = 0;
}
PHP Code:case UI_SELECTDIALOG://通知客户端显示选择窗口
{
KUiQuestionAndAnswer *pQuest = NULL;
KUiNpcSpr *pImage = NULL; // thêm dòng này
if (pScriptAction->m_nBufferLen <= 0) break;
if (pScriptAction->m_bOptionNum <= 0)
pQuest = (KUiQuestionAndAnswer *)malloc(sizeof(KUiQuestionAndAnswer));
else
pQuest = (KUiQuestionAndAnswer *)malloc(sizeof(KUiQuestionAndAnswer) + sizeof(KUiAnswer) * (pScriptAction->m_bOptionNum - 1));
pImage = (KUiNpcSpr *)malloc(sizeof(KUiNpcSpr)); // thêm dòng này
char strContent[1024];
char * pAnswer = NULL;
pQuest->AnswerCount = 0;
//主信息为字符串
if (pScriptAction->m_bParam1 == 0)
{
g_StrCpyLen(strContent, pScriptAction->m_pContent, pScriptAction->m_nBufferLen + 1);
pAnswer = strstr(strContent, "|");
if (!pAnswer)
{
pScriptAction->m_bOptionNum = 0;
pQuest->AnswerCount = 0;
}
else
*pAnswer++ = 0;
g_StrCpyLen(pQuest->Question, strContent, sizeof(pQuest->Question));
pQuest->QuestionLen = TEncodeText(pQuest->Question, strlen(pQuest->Question));
}
//主信息为数字标识
else
{
g_StrCpyLen(pQuest->Question, g_GetStringRes(*(int *)pScriptAction->m_pContent, szString, 1000), sizeof(pQuest->Question));
pQuest->QuestionLen = TEncodeText(pQuest->Question, strlen(pQuest->Question));
g_StrCpyLen(strContent, pScriptAction->m_pContent + sizeof(int), pScriptAction->m_nBufferLen - sizeof(int) + 1);
pAnswer = strContent + 1;
}
for (int i = 0; i < pScriptAction->m_bOptionNum; i ++)
{
char * pNewAnswer = strstr(pAnswer, "|");
if (pNewAnswer)
{
*pNewAnswer = 0;
strcpy(pQuest->Answer[i].AnswerText, pAnswer);
pQuest->Answer[i].AnswerLen = -1;
pAnswer = pNewAnswer + 1;
}
else
{
strcpy(pQuest->Answer[i].AnswerText, pAnswer);
pQuest->Answer[i].AnswerLen = -1;
pQuest->AnswerCount = i + 1;
break;
}
}
g_bUISelIntelActiveWithServer = pScriptAction->m_bParam2;
g_bUISelLastSelCount = pQuest->AnswerCount;
/*******************************************Code by thienthanden2*******************************************************/
if (m_nImageNpcID)
{
char szBuffer[128];
for (int i = 0; i < 16; i++)
{ Npc[m_nImageNpcID].GetNpcRes()->m_pcResNode->GetFileName(i, 3, 0, "", szBuffer, sizeof(szBuffer));
if (szBuffer[0])
{
strcpy(pImage->ImageFile, szBuffer);
pImage->MaxFrame = (Npc[m_nImageNpcID].GetNpcRes()->m_pcResNode->GetTotalFrames(i, 3, 0, 16))/
(Npc[m_nImageNpcID].GetNpcRes()->m_pcResNode->GetTotalDirs(i, 3, 0, 16)); goto Next;
}
}
for (int j = 0; j < 16; j++)
{
Npc[m_nImageNpcID].GetNpcRes()->m_pcResNode->GetFileName(j, 0, 0, "", szBuffer, sizeof(szBuffer));
if (szBuffer[0])
{
strcpy(pImage->ImageFile, szBuffer);
pImage->MaxFrame = (Npc[m_nImageNpcID].GetNpcRes()->m_pcResNode->GetTotalFrames(j, 0, 0, 16))/
(Npc[m_nImageNpcID].GetNpcRes()->m_pcResNode->GetTotalDirs(j, 0, 0, 16)); goto Next;
}
}
}
Next:
if (pScriptAction->m_Select == 1 && m_nImageNpcID)
CoreDataChanged(GDCNI_QUESTION_CHOOSE,(unsigned int) pQuest, (int) pImage);
else CoreDataChanged(GDCNI_QUESTION_CHOOSE,(unsigned int) pQuest, 0);
free(pImage);
pImage = NULL;
/******************************************Kết thúc********************************************************/
free(pQuest);
pQuest = NULL;
}
break;
inlude thêm vào:
PHP Code:#include "UiCase/UiMsgSel.h"
#include "UiCase/UiMsgSel2.h"//tìm cái kia và inlude cái này kế bên
PHP Code:case GDCNI_QUESTION_CHOOSE:
{
if (nParam)
KUiMsgSel2::OpenWindow((KUiQuestionAndAnswer*)uParam, (KUiNpcSpr*)nParam);
else KUiMsgSel::OpenWindow((KUiQuestionAndAnswer*)uParam);
}break;
Khai báo thêm 1 hàm void SetMaxFrame(int nMaxFrame);
8.File \JX\swrod3\SwordOnline\Sources\S3Client\Ui\Elem\Wn dImage.cpp
Nãy mới tạo hàm thì giờ xử lý hàm:
PHP Code:void KWndImage::SetMaxFrame(int nMaxFrame)
{
m_Image.nNumFrames = nMaxFrame;
}
Sửa lại thông số cho hàm static KUiMsgSel2* OpenWindow(KUiQuestionAndAnswer* pContent, KUiNpcSpr* pImage); //thêm param thứ 2
Khai báo thêm 1 biến chứa hình ảnh npc:
PHP Code:KWndImage m_NpcSpr;
Sửa lại hàm openwindow và 1 số thứ:
PHP Code:#define SCHEME_INI "Say2Fun.ini" //Sửa đường dẫn file ini cho phù hợp với source của các bạn, file ini do các bạn tạo ra từ file ini có sẵn của hàm Say
PHP Code:KUiMsgSel2* KUiMsgSel2::OpenWindow(KUiQuestionAndAnswer* pContent, KUiNpcSpr *pImage)
{
if (m_pSelf == NULL)
{
m_pSelf = new KUiMsgSel2;
if (m_pSelf)
{
m_pSelf->Initialize();
m_pSelf->m_NpcSpr.SetImage(ISI_T_SPR,pImage->ImageFile,true);
int nWidth, nHeight;
m_pSelf->m_NpcSpr.GetSize(&nWidth, &nHeight);
m_pSelf->m_NpcSpr.SetPosition(80 -nWidth/2, 80 -nHeight/2);
m_pSelf->m_NpcSpr.SetMaxFrame(pImage->MaxFrame);
}
}
if (m_pSelf)
{ m_pSelf->m_NpcSpr.SetImage(ISI_T_SPR,pImage->ImageFile,true);
int nWidth, nHeight;
m_pSelf->m_NpcSpr.GetSize(&nWidth, &nHeight);
m_pSelf->m_NpcSpr.SetPosition(80 -nWidth/2, 80 -nHeight/2);
m_pSelf->m_NpcSpr.SetMaxFrame(pImage->MaxFrame);
UiSoundPlay(UI_SI_WND_OPENCLOSE);
m_pSelf->BringToTop();
m_pSelf->Show(pContent);
}
return m_pSelf;
}
PHP Code:int KUiMsgSel2::Initialize()
{
AddChild(&m_NpcSpr); // dòng thêm
AddChild(&m_MsgScrollList);
AddChild(&m_InfoText);
m_Style &= ~WND_S_VISIBLE;
Wnd_AddWindow(this, WL_TOPMOST);
char Scheme[256];
g_UiBase.GetCurSchemePath(Scheme, 256);
LoadScheme(Scheme);
return true;
}
PHP Code:void KUiMsgSel2::LoadScheme(const char* pScheme)
{
if (m_pSelf == NULL)
return;
char Buff[128];
KIniFile Ini;
sprintf(Buff, "%s\\"SCHEME_INI, pScheme);
if (Ini.Load(Buff))
{
m_pSelf->Init(&Ini, "Main");
m_pSelf->m_MsgScrollList.Init(&Ini, "Select");
m_pSelf->m_InfoText.Init(&Ini, "InfoText");
m_pSelf->m_NpcSpr.Init(&Ini, "NpcSpr"); // dòng này là khởi tạo theo file ini, khỏi cũng được
}
}
PHP Code:void KUiMsgSel2::Breathe()
{ if (m_NpcSpr.IsVisible())
m_NpcSpr.NextFrame(); //thêm
if (m_bAutoUp)
{
if (IR_IsTimePassed(200, m_uLastScrollTime))
{
ChangeCurSel(false);
m_uLastScrollTime = IR_GetCurrentTime();
}
}
if (m_bAutoDown)
{
if (IR_IsTimePassed(200, m_uLastScrollTime))
{
ChangeCurSel(true);
m_uLastScrollTime = IR_GetCurrentTime();
}
}
}
Lần sửa cuối bởi thienthanden2, ngày 29-01-13 lúc 01:53 PM.
Khách viếng thăm hãy cùng thienthanden2 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
The Following 27 Users Say Thank You to thienthanden2 For This Useful Post:
assaa (30-01-13), bitibita (17-05-13),
Bybaybong(14-02-13), chaoban6 (01-07-13), dv911 (29-01-13), Edward_Newgate (30-01-13), GoldenPhoenix (29-01-13), greentears (29-01-13), HeavenGames (13-02-13), heocon246 (29-01-13), J4cksparrow (31-01-13), jxvietnam (29-01-13), kbgqedtt (16-05-13), lkusa1992 (31-01-13), loianhhua003 (29-01-13), nguyennhan718 (29-01-13), nh0xthien (05-06-13), nhoxmap_b7 (29-01-13), radise (31-01-13), satthupro95 (31-01-13), thaihoa91 (29-01-13), thanhtunghk (31-01-13), thongnhata12 (21-02-13), trananh88vt (30-01-13), vipprolc (29-01-13), Vo Le (13-06-13), yukite26 (26-03-13)
-
29-01-13, 06:51 AM #2
- Ngày tham gia
- Jul 2011
- Bài viết
- 522
- Thanks
- 269
- Thanked 308 Times in 196 Posts
Ðề: Source code - Hàm Say version 2.
pro nào mới xuất hiện
.........................................Khách viếng thăm hãy cùng greentears xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
30-01-13, 07:48 AM #3
Ðề: Source code - Hàm Say version 2.
Cách sử dụng hình ảnh npc trên bảng say này có giống bên CBT ko bạn. có thể hd cách hiển thị được ko bạn
Khách viếng thăm hãy cùng assaa xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
30-01-13, 09:28 AM #4
- Ngày tham gia
- Jun 2007
- Đang ở
- Thiên đường đã lỡ...
- Bài viết
- 217
- Thanks
- 14
- Thanked 183 Times in 73 Posts
Ðề: Source code - Hàm Say version 2.
Khách viếng thăm hãy cùng thienthanden2 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
31-01-13, 04:42 PM #5
- Ngày tham gia
- May 2009
- Đang ở
- Nơi rất xa
- Bài viết
- 2,479
- Thanks
- 572
- Thanked 1,848 Times in 503 Posts
Ðề: Source code - Hàm Say version 2.
nếu rãnh thì hd làm cái pass rương nhập số từ bàn phím luôn nha bạn
Khách viếng thăm hãy cùng jxvietnam xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
31-01-13, 06:08 PM #6
- Ngày tham gia
- Aug 2012
- Bài viết
- 174
- Thanks
- 24
- Thanked 96 Times in 34 Posts
Ðề: Source code - Hàm Say version 2.
chia sẻ thế này thì ai cũng tự làm cho mình 1 sever đc rồi
Khách viếng thăm hãy cùng radise xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
31-01-13, 06:24 PM #7
- Ngày tham gia
- Jun 2007
- Đang ở
- Thiên đường đã lỡ...
- Bài viết
- 217
- Thanks
- 14
- Thanked 183 Times in 73 Posts
Ðề: Source code - Hàm Say version 2.
Khách viếng thăm hãy cùng thienthanden2 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
31-01-13, 06:31 PM #8
- Ngày tham gia
- Dec 2012
- Bài viết
- 428
- Thanks
- 9
- Thanked 123 Times in 84 Posts
Ðề: Source code - Hàm Say version 2.
Lần sửa cuối bởi Bi_Dep_Trai, ngày 31-01-13 lúc 06:34 PM.
Khách viếng thăm hãy cùng Bi_Dep_Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
31-01-13, 10:23 PM #9
- Ngày tham gia
- Jun 2007
- Đang ở
- Thiên đường đã lỡ...
- Bài viết
- 217
- Thanks
- 14
- Thanked 183 Times in 73 Posts
Ðề: Source code - Hàm Say version 2.
Khách viếng thăm hãy cùng thienthanden2 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
31-01-13, 10:39 PM #10
- Ngày tham gia
- Jan 2013
- Bài viết
- 13
- Thanks
- 2
- Thanked 3 Times in 3 Posts
Ðề: Source code - Hàm Say version 2.
Khách viếng thăm hãy cùng Smile68 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
Các Chủ đề tương tự
-
[JX] [Develop/Release] Share Full Source Version VC8/vS2005 (EB-Team)
Bởi HeavenGames trong diễn đàn Guides - Kho Lưu trữTrả lời: 46Bài viết cuối: 18-08-21, 03:31 PM -
Có Source code hải tặc 2 chưa
Bởi kakaknight12 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 3Bài viết cuối: 18-03-13, 06:06 PM -
[JX] source code mã khóa nhân vật
Bởi hero100 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 2Bài viết cuối: 18-02-13, 11:51 AM -
[Gunny] [DDTank 3.0] Share Source MySQL Version
Bởi HeavenGames trong diễn đàn ReleasesTrả lời: 3Bài viết cuối: 22-07-12, 09:58 PM -
Share code MUCore™ Engine Version 1.0.6
Bởi vothailam trong diễn đàn SQL Server & WebsiteTrả lời: 8Bài viết cuối: 17-09-11, 12:05 PM