<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-643741689426516243</id><updated>2011-04-21T10:42:29.035-07:00</updated><category term='T007'/><category term='原創'/><category term='教學文章'/><title type='text'>MS-Training</title><subtitle type='html'>有想法卻不去嚐試，才是最大的成本</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-3035460094487823553</id><published>2008-04-21T19:42:00.000-07:00</published><updated>2008-04-21T19:55:10.039-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='教學文章'/><category scheme='http://www.blogger.com/atom/ns#' term='原創'/><title type='text'>[T007] 修正eyes錯誤</title><content type='html'>不知道為什麼這一系列的都出現了這樣的錯誤,令人不解&lt;br /&gt;&lt;br /&gt;這邊只舉一個地方來做修改,如果有遇到相關的錯誤,可以自行運用 :)&lt;br /&gt;&lt;br /&gt;(略) plasticsurgery.cpp(135) : warning C4700: 使用了未初始化的區域變數 'eyes'&lt;br /&gt;&lt;br /&gt;原始程式碼：&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_1052005(NPC* npc){&lt;br /&gt; int eyes[] = {20000, 20001, 20002, 20003, 20004, 20006, 20007, 20008, 20012, 20013};&lt;br /&gt; int state = npc-&gt;getState();&lt;br /&gt; if(state == 0){&lt;br /&gt;  npc-&gt;addText("If you use the regular coupon, your face may transform into a random new look. ");&lt;br /&gt;  npc-&gt;addText("Do you still want to use the #bHenesys Face Coupon (REG)#k?");&lt;br /&gt;  npc-&gt;sendYesNo();&lt;br /&gt; }&lt;br /&gt; if(state == 1){&lt;br /&gt;  if(npc-&gt;getSelected() == YES){&lt;br /&gt;   if(npc-&gt;getItemNum(5152000) &gt;= 1){&lt;br /&gt;    npc-&gt;giveItem(5152000, -1);&lt;br /&gt;   int random = rand()% 10 + 1;&lt;br /&gt;   if(random == 1){&lt;br /&gt;    npc-&gt;setStyle(eyes[20000]);}  &lt;---135行&lt;br /&gt;   if(random == 2){&lt;br /&gt;    npc-&gt;setStyle(eyes[20001]);}&lt;br /&gt;   if(random == 3){&lt;br /&gt;    npc-&gt;setStyle(eyes[20002]);}&lt;br /&gt;   if(random == 4){&lt;br /&gt;    npc-&gt;setStyle(eyes[20003]);}&lt;br /&gt;   if(random == 5){&lt;br /&gt;    npc-&gt;setStyle(eyes[20004]);}&lt;br /&gt;   if(random == 6){&lt;br /&gt;    npc-&gt;setStyle(eyes[20006]);}&lt;br /&gt;   if(random == 7){&lt;br /&gt;    npc-&gt;setStyle(eyes[20007]);}&lt;br /&gt;   if(random == 8){&lt;br /&gt;    npc-&gt;setStyle(eyes[20008]);}&lt;br /&gt;   if(random == 9){&lt;br /&gt;    npc-&gt;setStyle(eyes[20012]);}&lt;br /&gt;   if(random == 10){&lt;br /&gt;    npc-&gt;setStyle(eyes[20013]);}&lt;br /&gt;   npc-&gt;end();&lt;br /&gt;   }&lt;br /&gt;   else{&lt;br /&gt;   npc-&gt;addText("Hmm ... it looks like you don't have the coupon specifically for this place...sorry to say this, but without the coupon, there's no plastic surgery for you.");&lt;br /&gt;   npc-&gt;sendNext();&lt;br /&gt;   npc-&gt;end();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;顧名思義,問題出在eyes[]這個地方,所以我們稍加修改&lt;br /&gt;&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;3&gt;&lt;br /&gt;void NPCsScripts::npc_1052005(NPC* npc){&lt;br /&gt; int eyes[] = {20000, 20001, 20002, 20003, 20004, 20006, 20007, 20008, 20012, 20013};&lt;br /&gt; int state = npc-&gt;getState();&lt;br /&gt; if(state == 0){&lt;br /&gt;  npc-&gt;addText("If you use the regular coupon, your face may transform into a random new look. ");&lt;br /&gt;  npc-&gt;addText("Do you still want to use the #bHenesys Face Coupon (REG)#k?");&lt;br /&gt;  npc-&gt;sendYesNo();&lt;br /&gt; }&lt;br /&gt; if(state == 1){&lt;br /&gt;  if(npc-&gt;getSelected() == YES){&lt;br /&gt;   if(npc-&gt;getItemNum(5152000) &gt;= 1){&lt;br /&gt;    npc-&gt;giveItem(5152000, -1);&lt;br /&gt;   int random = rand()% 10 + 1;&lt;font color="Red"&gt;&lt;br /&gt;   if(random == 1){&lt;br /&gt;    npc-&gt;setStyle(eyes[0]);} &lt;br /&gt;   if(random == 2){&lt;br /&gt;    npc-&gt;setStyle(eyes[1]);}&lt;br /&gt;   if(random == 3){&lt;br /&gt;    npc-&gt;setStyle(eyes[2]);}&lt;br /&gt;   if(random == 4){&lt;br /&gt;    npc-&gt;setStyle(eyes[3]);}&lt;br /&gt;   if(random == 5){&lt;br /&gt;    npc-&gt;setStyle(eyes[4]);}&lt;br /&gt;   if(random == 6){&lt;br /&gt;    npc-&gt;setStyle(eyes[5]);}&lt;br /&gt;   if(random == 7){&lt;br /&gt;    npc-&gt;setStyle(eyes[6]);}&lt;br /&gt;   if(random == 8){&lt;br /&gt;    npc-&gt;setStyle(eyes[7]);}&lt;br /&gt;   if(random == 9){&lt;br /&gt;    npc-&gt;setStyle(eyes[8]);}&lt;br /&gt;   if(random == 10){&lt;br /&gt;    npc-&gt;setStyle(eyes[9]);}&lt;br /&gt;   npc-&gt;end();&lt;br /&gt;   }&lt;/font&gt;&lt;br /&gt;   else{&lt;br /&gt;   npc-&gt;addText("Hmm ... it looks like you don't have the coupon specifically for this place...sorry to say this, but without the coupon, there's no plastic surgery for you.");&lt;br /&gt;   npc-&gt;sendNext();&lt;br /&gt;   npc-&gt;end();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;看出來了嗎?&lt;br /&gt;&lt;br /&gt;由於我們宣告的時候是 &lt;font color="blue"&gt;int eyes[] = {20000, 20001, 20002, 20003, 20004, 20006, 20007, 20008, 20012, 20013};&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;所以使用的時候應該針對每個位置 eyes[0] (代表20000),eyes[1] (代表(20001)....依此類推&lt;br /&gt;&lt;br /&gt;而不是使用 eyes[20000],eyes[20001] ,這樣他會去尋找eyes的第20000個..當然會出現錯誤囉!&lt;br /&gt;&lt;br /&gt;如果還有遇到類似的相關問題,可以自己修改囉!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-3035460094487823553?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/3035460094487823553/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=3035460094487823553' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/3035460094487823553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/3035460094487823553'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/t007-eyes.html' title='[T007] 修正eyes錯誤'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-4964399510621223954</id><published>2008-04-21T19:28:00.000-07:00</published><updated>2008-04-21T19:37:39.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='教學文章'/><category scheme='http://www.blogger.com/atom/ns#' term='原創'/><title type='text'>[T007] 修正變換髮型造成當機的錯誤</title><content type='html'>針對&lt;a href="http://training-ms.blogspot.com/2008/04/blog-post_17.html"&gt;[T007] 讓倉庫管理員變成造型師&lt;/a&gt; 這篇作修正的!&lt;br /&gt;&lt;br /&gt;原本的code裡面不小心寫到不存在的"髮型",所以當你選到那個地方的時候,就會造成錯誤囉!&lt;br /&gt;只要把下面紅色的地方修正即可!&lt;br /&gt;&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;// add by squall 2008-08-04-14&lt;br /&gt;void NPCsScripts::npc_1002005(NPC* npc){&lt;br /&gt;int state = npc-&gt;getState();&lt;br /&gt;int skins[] = {0, 1, 2, 3, 4};&lt;br /&gt;&lt;font color="red"&gt;int hairs[] = {31000, 31010, 31020, 31030, 31040, 31050, 31060, 31070, 31080, 31090, 31100, 31110, 31120, 31130, 31140, 31150, 31160, 31170, 31180, 31190, 31200, 31210, 31220, 31230, 31240, 31250, 31260, 31270, 31280, 31290, 31300, 31310, 31320, 31330, 31340, 31350, 31400, 31410, 31420, 31430, 31440, 31450, 31460, 31470, 31480, 31490, 31510, 31520, 31530, 31540, 31550, 31560, 31570, 31580, 31590, 31600, 31610, 31620, 31630, 31640, 31650, 31680, 31690, 31700, 31710, 31720, 31730};&lt;br /&gt;int hairscolor[] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};&lt;/font&gt;&lt;br /&gt;int eyes[] = {21000, 21001, 21002, 21003, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21016, 21017, 21018, 21019, 21020, 21022};&lt;br /&gt;if(state == 0){&lt;br /&gt; npc-&gt;addText("#L0#變換膚色#l\r\n#L1#變換髮型#l\r\n#L2#變換髮型顏色#l\r\n#L3#變換眼睛#l\r\n#L4#變換眼睛顏色#l");&lt;br /&gt; npc-&gt;sendSimple();&lt;br /&gt;}&lt;br /&gt;else if(state == 1){&lt;br /&gt;int type = npc-&gt;getSelected();&lt;br /&gt;npc-&gt;setVariable("type", type);&lt;br /&gt;if(type == 0){&lt;br /&gt;npc-&gt;sendStyle(skins, 5);&lt;br /&gt;}&lt;br /&gt;else if(type == 1){&lt;br /&gt;&lt;font color="red"&gt;npc-&gt;sendStyle(hairs, 67);&lt;/font&gt;&lt;br /&gt;}&lt;br /&gt;else if(type == 2){&lt;br /&gt;int cur = npc-&gt;getPlayerHair()/10*10;&lt;br /&gt;int colors[] = {cur, cur+1, cur+2, cur+3, cur+4, cur+5, cur+6, cur+7};&lt;br /&gt;npc-&gt;sendStyle(colors, hairscolor[npc-&gt;getPlayerHair()%1000/10]);&lt;br /&gt;} &lt;br /&gt;else if(type == 3){&lt;br /&gt;npc-&gt;sendStyle(eyes, 21);&lt;br /&gt;}&lt;br /&gt;else if(type == 4){&lt;br /&gt;int cur = npc-&gt;getPlayerEyes()%100+20000;&lt;br /&gt;int colors[] = {cur, cur+100, cur+200, cur+300, cur+400, cur+500, cur+600, cur+700};&lt;br /&gt;npc-&gt;sendStyle(colors, 8);&lt;br /&gt;}&lt;br /&gt;else{&lt;br /&gt;npc-&gt;end();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else if(state == 2){&lt;br /&gt;npc-&gt;end();&lt;br /&gt;int type = npc-&gt;getVariable("type");&lt;br /&gt;if(type == 0){&lt;br /&gt;npc-&gt;setStyle(skins[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;else if(type == 1){&lt;br /&gt;npc-&gt;setStyle(hairs[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;else if(type == 2){&lt;br /&gt;npc-&gt;setStyle(npc-&gt;getPlayerHair()/10*10 + npc-&gt;getSelected());&lt;br /&gt;}&lt;br /&gt;else if(type == 3){&lt;br /&gt;npc-&gt;setStyle(eyes[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;else if(type == 4){&lt;br /&gt;npc-&gt;setStyle(20000+npc-&gt;getPlayerEyes()%100 + npc-&gt;getSelected()*100);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;npc-&gt;setStyle(eyes[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-4964399510621223954?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/4964399510621223954/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=4964399510621223954' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/4964399510621223954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/4964399510621223954'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/t007.html' title='[T007] 修正變換髮型造成當機的錯誤'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-144952949902911289</id><published>2008-04-17T02:41:00.000-07:00</published><updated>2008-04-17T02:42:48.448-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='教學文章'/><title type='text'>如何自己新增NPC</title><content type='html'>Step 1. 首先要建立一個新的CPP-&gt; cody.cpp&lt;br /&gt; &lt;br /&gt;Step 2.在cody.cpp中,我們首先要插入下列這段程式碼&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;#include "NPCs.h"&lt;br /&gt;#include "NPCsScripts.h"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3.我們接下來要著手比較困難的部分,我們必須在NPCsScripts中宣告一個void的function,如下&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_2100(NPC* npc){&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;現在也許你會擔心,我該如何取得npc_2100這代碼呢?&lt;br /&gt;非常簡單,你可以到這網站尋找所有的&lt;a href="http://sauna.gibbed.us/npc_search/" target="_blank"&gt;NPC代碼&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 4. 我們必須宣告state及map&lt;br /&gt;state-&gt; Current State&lt;br /&gt;map-&gt; Game map..&lt;br /&gt;&lt;br /&gt;所以我們必須在下列這段程式碼這裡面&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_2100(NPC* npc){&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;新增這段程式碼&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;int state = npc-&gt;getState();&lt;br /&gt;    int map = npc-&gt;getPlayerMap();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;所以看起來會像&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_2100(NPC* npc){&lt;br /&gt;int state = npc-&gt;getState();&lt;br /&gt;int map = npc-&gt;getPlayerMap();&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Step5. 現在我們需要在我們的地圖上新增檢查&lt;br /&gt;&lt;br /&gt;這段程式碼之後&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;int state = npc-&gt;getState();&lt;br /&gt;int map = npc-&gt;getPlayerMap();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;新增這段&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;if(npc-&gt;getPlayerMap() == 100000000){&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;也許你不知道地圖的代碼,所以可以到這&lt;a href="http://sauna.gibbed.us/maps" target="_blank"&gt;查詢地圖代碼&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step6. 這裡可能會讓你造成困惑,但是在後面我會有更詳細的介紹,state[0]代表開始對話,state[1]代表選擇[是/否] (記住這邊只是範例而已!! 詳細的用法需要到程式碼中查詢)&lt;br /&gt;接下來我們在&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;if(npc-&gt;getPlayerMap() == 100000000){&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;裡面新增&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;if(state == 0){&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;所以我們現在的程式碼看起來會像&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_2100(NPC* npc){&lt;br /&gt;    int state = npc-&gt;getState();&lt;br /&gt;    int map = npc-&gt;getPlayerMap();&lt;br /&gt;    if(npc-&gt;getPlayerMap() == 100000000){&lt;br /&gt;        if(state == 0){&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;這樣我們就完成啦!!&lt;br /&gt;&lt;br /&gt;接下來我們只需要設定何時使用這個NPC就好了,接下來是實際新增NPC的例子&lt;br /&gt;&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;#include "NPCs.h"&lt;br /&gt;#include "NPCsScripts.h"&lt;br /&gt;&lt;br /&gt;void NPCsScripts::npc_2100(NPC* npc){&lt;br /&gt;    int state = npc-&gt;getState();&lt;br /&gt;    int map = npc-&gt;getPlayerMap();&lt;br /&gt;    if(npc-&gt;getPlayerMap() == 100000000){&lt;br /&gt;        if(state == 0){&lt;br /&gt;      &lt;br /&gt;             npc-&gt;addText("");//Send Text For Cody To Output&lt;br /&gt;             npc-&gt;sendNext();//Just think of this to enable you to Click "next" button for continuing....&lt;br /&gt;             npc-&gt;addText("Good Bye");&lt;br /&gt;             npc-&gt;sendOK();//Think of this to Enable click "ok" before continuing...&lt;br /&gt;             npc-&gt;end();//You should know what this is.....Quit Talking to NPC...?&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;現在讓我們把NPC ID換成9200000 &lt;br /&gt;&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_2100(NPC* npc)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;換成&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;void NPCsScripts::npc_9200000(NPC* npc)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;接著開啟NPCsScripts.h,你應該可以看到下列這兩段程式碼&lt;br /&gt;&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;switch(npcid){&lt;br /&gt;            case 2100: npc_2100(npc); break;&lt;br /&gt;            case 2101: npc_2101(npc); break;&lt;br /&gt;            case 2020005: npc_2020005(npc); break;&lt;br /&gt;            case 9101001: npc_9101001(npc); break;&lt;br /&gt;            case 9900000: npc_9900000(npc); break;&lt;br /&gt;            default: npc-&gt;end(); break;&lt;br /&gt;        }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;及&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;private:&lt;br /&gt;    static void npc_2100(NPC* npc);&lt;br /&gt;    static void npc_2101(NPC* npc);&lt;br /&gt;    static void npc_2020005(NPC* npc);&lt;br /&gt;    static void npc_9101001(NPC* npc);&lt;br /&gt;    static void npc_9900000(NPC* npc);&lt;br /&gt;    &lt;/code&gt;&lt;br /&gt;    &lt;br /&gt;將下列兩個程式碼加進去即可&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;static void npc_9200000(NPC* npc);  &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;及&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;case 9900000: npc_9200000(npc); break;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;這樣就完成啦! 非常簡單吧~ 只是過程瑣碎XD&lt;br /&gt;&lt;br /&gt;底下是npc的一些指令&lt;br /&gt;&lt;br /&gt;&lt;code class="c"&gt;&lt;br /&gt;npc-&gt;addChar(char cha);&lt;br /&gt;npc-&gt;addQuest(int QuestID);&lt;br /&gt;npc-&gt;addText(char string);&lt;br /&gt;npc-&gt;cend();&lt;br /&gt;npc-&gt;end();&lt;br /&gt;npc-&gt;endQuest();&lt;br /&gt;npc-&gt;getItemNum(int itemid);&lt;br /&gt;npc-&gt;getMesos();&lt;br /&gt;npc-&gt;getNpcID();&lt;br /&gt;npc-&gt;getnum();&lt;br /&gt;npc-&gt;getNumber();&lt;br /&gt;npc-&gt;getPlayer();&lt;br /&gt;npc-&gt;getPlayerEyes();&lt;br /&gt;npc-&gt;getPlayerHP();&lt;br /&gt;npc-&gt;getPlayerMap();&lt;br /&gt;npc-&gt;getSelected();&lt;br /&gt;npc-&gt;getState();&lt;br /&gt;npc-&gt;getState();&lt;br /&gt;npc-&gt;getText();&lt;br /&gt;npc-&gt;gettext();&lt;br /&gt;npc-&gt;getVariable(char *name);&lt;br /&gt;npc-&gt;giveEXP(int exp);&lt;br /&gt;npc-&gt;giveItem(int itemid,short amount);&lt;br /&gt;npc-&gt;giveMesos(int amount);&lt;br /&gt;npc-&gt;isEnd();//bool&lt;br /&gt;npc-&gt;isQuest();//bool&lt;br /&gt;npc-&gt;isquest();&lt;br /&gt;npc-&gt;isStart();//bool&lt;br /&gt;npc-&gt;isstart();&lt;br /&gt;npc-&gt;npcid();&lt;br /&gt;npc-&gt;npcPacket(char type);&lt;br /&gt;npc-&gt;player();//More to come....&lt;br /&gt;npc-&gt;selected();&lt;br /&gt;npc-&gt;sendAcceptDecline();&lt;br /&gt;npc-&gt;sendBackNext();&lt;br /&gt;npc-&gt;sendOK();&lt;br /&gt;npc-&gt;sendBackOK();&lt;br /&gt;npc-&gt;sendGetNumber(int def,int min,int max);&lt;br /&gt;npc-&gt;sendGetText();&lt;br /&gt;npc-&gt;sendOK();&lt;br /&gt;npc-&gt;sendNext();&lt;br /&gt;npc-&gt;sendSimple();&lt;br /&gt;npc-&gt;sendStyle();&lt;br /&gt;npc-&gt;sendYesNo();&lt;br /&gt;npc-&gt;setGetNumber(int num);&lt;br /&gt;npc-&gt;setGetText(char *text);&lt;br /&gt;npc-&gt;setIsStart(bool what);&lt;br /&gt;npc-&gt;setPlayerHP(short hp);&lt;br /&gt;npc-&gt;setSelected(int selected);&lt;br /&gt;npc-&gt;setState(int state);&lt;br /&gt;npc-&gt;setStyle(int id);&lt;br /&gt;npc-&gt;setVariable(char *name,int val);&lt;br /&gt;npc-&gt;showShop();&lt;br /&gt;npc-&gt;state();&lt;br /&gt;npc-&gt;teleport(int mapid);&lt;br /&gt;npc-&gt;text();&lt;br /&gt;npc-&gt;vars();&lt;br /&gt;npc-&gt;~NPC();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;原文網址:&lt;a href="http://forum.ragezone.com/f428/guide-scripting-your-npc-381658/" target="_blank"&gt;http://forum.ragezone.com/f428/guide-scripting-your-npc-381658/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-144952949902911289?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/144952949902911289/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=144952949902911289' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/144952949902911289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/144952949902911289'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/npc.html' title='如何自己新增NPC'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-6650177981189287933</id><published>2008-04-17T01:28:00.000-07:00</published><updated>2008-04-17T08:27:16.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='教學文章'/><category scheme='http://www.blogger.com/atom/ns#' term='T007'/><title type='text'>[T007] 修正使用四轉技能無法登入的問題</title><content type='html'>方法1 跟 方法2 的結果是一樣的! 所以請選擇其中一種方法就可以囉!! ^^&lt;br /&gt;&lt;br /&gt;方法 1. 請開啟你的PlayerPacket.cpp,並將下面程式碼全部取代&lt;br /&gt;&lt;code class="c"&gt;#include "PlayerPacket.h"&lt;br /&gt;#include "PacketCreator.h"&lt;br /&gt;#include "Player.h"&lt;br /&gt;#include "Inventory.h"&lt;br /&gt;#include "Skills.h"&lt;br /&gt;#include "SkillsPacket.h" //for 4th job skills error 38 fix&lt;br /&gt;&lt;br /&gt;void PlayerPacket::connectData(Player* player){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x4D);&lt;br /&gt;packet.addInt(0); // Channel&lt;br /&gt;packet.addBytes("0101853D4B11F4836B3DBA9A4FA1");&lt;br /&gt;packet.addShort(-1);&lt;br /&gt;packet.addInt(player-&gt;getPlayerid());&lt;br /&gt;packet.addString(player-&gt;getName(), 12);&lt;br /&gt;packet.addByte(0);&lt;br /&gt;packet.addByte(player-&gt;getGender());&lt;br /&gt;packet.addByte(player-&gt;getSkin());&lt;br /&gt;packet.addInt(player-&gt;getEyes());&lt;br /&gt;packet.addInt(player-&gt;getHair());&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addByte(player-&gt;getLevel());&lt;br /&gt;packet.addShort(player-&gt;getJob());&lt;br /&gt;packet.addShort(player-&gt;getStr());&lt;br /&gt;packet.addShort(player-&gt;getDex());&lt;br /&gt;packet.addShort(player-&gt;getInt());&lt;br /&gt;packet.addShort(player-&gt;getLuk());&lt;br /&gt;packet.addShort(player-&gt;getHP());&lt;br /&gt;packet.addShort(player-&gt;getMHP());&lt;br /&gt;packet.addShort(player-&gt;getMP());&lt;br /&gt;packet.addShort(player-&gt;getMMP());&lt;br /&gt;packet.addShort(player-&gt;getAp());&lt;br /&gt;packet.addShort(player-&gt;getSp());&lt;br /&gt;packet.addInt(player-&gt;getExp());&lt;br /&gt;packet.addShort(player-&gt;getFame());&lt;br /&gt;packet.addInt(player-&gt;getMap());&lt;br /&gt;packet.addByte(player-&gt;getMappos());&lt;br /&gt;packet.addByte(0x14);&lt;br /&gt;packet.addInt(player-&gt;inv-&gt;getMesos());&lt;br /&gt;packet.addByte(100);&lt;br /&gt;packet.addByte(100);&lt;br /&gt;packet.addByte(100);&lt;br /&gt;packet.addByte(100);&lt;br /&gt;packet.addByte(100);&lt;br /&gt;for(int i=0; i&lt;player-&gt;inv-&gt;getEquipNum(); i++){&lt;br /&gt; Equip* equip = player-&gt;inv-&gt;getEquip(i);&lt;br /&gt; if(equip-&gt;pos&lt;0){&gt;type);&lt;br /&gt;  packet.addByte(1);&lt;br /&gt;  packet.addInt(equip-&gt;id);&lt;br /&gt;  packet.addShort(0);&lt;br /&gt;  packet.addBytes("8005BB46E61702");&lt;br /&gt;  packet.addShort(equip-&gt;slots); // slots&lt;br /&gt;  packet.addShort(equip-&gt;istr); // STR&lt;br /&gt;  packet.addShort(equip-&gt;idex); // DEX&lt;br /&gt;  packet.addShort(equip-&gt;iint); // INT&lt;br /&gt;  packet.addShort(equip-&gt;iluk); // LUK&lt;br /&gt;  packet.addShort(equip-&gt;ihp); // HP&lt;br /&gt;  packet.addShort(equip-&gt;imp); // MP&lt;br /&gt;  packet.addShort(equip-&gt;iwatk); // W.Atk&lt;br /&gt;  packet.addShort(equip-&gt;imatk); // M.Atk&lt;br /&gt;  packet.addShort(equip-&gt;iwdef); // W.def&lt;br /&gt;  packet.addShort(equip-&gt;imdef); // M.Def&lt;br /&gt;  packet.addShort(equip-&gt;iacc); // Acc &lt;br /&gt;  packet.addShort(equip-&gt;iavo); // Avo &lt;br /&gt;  packet.addShort(equip-&gt;ihand); // Hands &lt;br /&gt;  packet.addShort(equip-&gt;ispeed); // Speed &lt;br /&gt;  packet.addShort(equip-&gt;ijump); // Jump &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;packet.addShort(0);&lt;br /&gt;for(int i=0; i&lt;player-&gt;inv-&gt;getEquipNum(); i++){&lt;br /&gt; Equip* equip = player-&gt;inv-&gt;getEquip(i);&lt;br /&gt; if(equip-&gt;pos&gt;0){&lt;br /&gt;  packet.addByte((char)equip-&gt;pos);&lt;br /&gt;  packet.addByte(1);&lt;br /&gt;  packet.addInt(equip-&gt;id);&lt;br /&gt;  packet.addShort(0);&lt;br /&gt;  packet.addBytes("8005BB46E61702");&lt;br /&gt;  packet.addShort(equip-&gt;slots); // slots&lt;br /&gt;  packet.addShort(equip-&gt;istr); // STR&lt;br /&gt;  packet.addShort(equip-&gt;idex); // DEX&lt;br /&gt;  packet.addShort(equip-&gt;iint); // INT&lt;br /&gt;  packet.addShort(equip-&gt;iluk); // LUK&lt;br /&gt;  packet.addShort(equip-&gt;ihp); // HP&lt;br /&gt;  packet.addShort(equip-&gt;imp); // MP&lt;br /&gt;  packet.addShort(equip-&gt;iwatk); // W.Atk&lt;br /&gt;  packet.addShort(equip-&gt;imatk); // M.Atk&lt;br /&gt;  packet.addShort(equip-&gt;iwdef); // W.def&lt;br /&gt;  packet.addShort(equip-&gt;imdef); // M.Def&lt;br /&gt;  packet.addShort(equip-&gt;iacc); // Acc &lt;br /&gt;  packet.addShort(equip-&gt;iavo); // Avo &lt;br /&gt;  packet.addShort(equip-&gt;ihand); // Hands &lt;br /&gt;  packet.addShort(equip-&gt;ispeed); // Speed &lt;br /&gt;  packet.addShort(equip-&gt;ijump); // Jump &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0); &lt;br /&gt;  packet.addShort(0);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;packet.addByte(0);&lt;br /&gt;for(int j=2; j&lt;=5; j++){   for(int i=0; i&lt;player-&gt;inv-&gt;getItemNum(); i++){&lt;br /&gt;  Item* item = player-&gt;inv-&gt;getItem(i);&lt;br /&gt;  if(item-&gt;inv == j){&lt;br /&gt;   packet.addByte((char)item-&gt;pos);&lt;br /&gt;   packet.addByte(2);&lt;br /&gt;   packet.addInt(item-&gt;id);&lt;br /&gt;   packet.addShort(0);&lt;br /&gt;   packet.addBytes("8005BB46E61702");&lt;br /&gt;   packet.addShort(item-&gt;amount); // slots&lt;br /&gt;   packet.addInt(0);  &lt;br /&gt;   if(ISSTAR(item-&gt;id)){&lt;br /&gt;    packet.addInt(2);&lt;br /&gt;    packet.addShort(0x54);&lt;br /&gt;    packet.addByte(0);&lt;br /&gt;    packet.addByte(0x34);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; packet.addByte(0);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;packet.addShort(0); //Skills&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;for(int i=0; i&lt;15; i="0;"&gt;skills-&gt;getSkillsNum(); i++){&lt;br /&gt; SkillsPacket::addSkill(player, player-&gt;skills-&gt;getSkillID(i), player-&gt;skills-&gt;getSkillLevel(player-&gt;skills-&gt;getSkillID(i)));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::newHP(Player* player, short hp){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addByte(0);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addShort(4);&lt;br /&gt;packet.addByte(0);&lt;br /&gt;packet.addShort(hp);&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::newMP(Player* player, short mp, bool is){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addByte(is);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addShort(0x10);&lt;br /&gt;packet.addByte(0);&lt;br /&gt;packet.addShort(mp);&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::newEXP(Player* player, int exp){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addShort(1);&lt;br /&gt;packet.addInt(exp);&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void PlayerPacket::showKeys(Player* player, int keys[90]){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0xf6);&lt;br /&gt;packet.addByte(0);&lt;br /&gt;for(int i=0; i&lt;90; packet =" Packet();"&gt;getSp());&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::setJob(Player* player){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addInt(0x20);&lt;br /&gt;packet.addShort(player-&gt;getJob());&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::newHair(Player* player){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addInt(0x4);&lt;br /&gt;packet.addInt(player-&gt;getHair());&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::newEyes(Player* player){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addInt(0x2);&lt;br /&gt;packet.addInt(player-&gt;getEyes());&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void PlayerPacket::newSkin(Player* player){&lt;br /&gt;Packet packet = Packet();&lt;br /&gt;packet.addHeader(0x23);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;packet.addInt(0x1);&lt;br /&gt;packet.addByte(player-&gt;getSkin());&lt;br /&gt;packet.packetSend(player);&lt;br /&gt;}&lt;/player-&gt;&lt;/player-&gt;&lt;/player-&gt;&lt;/player-&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;方法 2:&lt;br /&gt;&lt;br /&gt;自己動手修改囉!&lt;br /&gt;Step 1.首先在最放上方新增一個,原作者建議放在 #include "Skills.h" 後面 (基本上沒差)&lt;br /&gt;&lt;code class="c"&gt;#include "SkillsPacket.h"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Step 2.將下面這五行程式碼刪除&lt;br /&gt;&lt;code class="c"&gt; packet.addShort(player-&gt;skills-&gt;getSkillsNum());&lt;br /&gt;for(int i=0; i&lt;player-&gt;skills-&gt;getSkillsNum(); i++){&lt;br /&gt; packet.addInt(player-&gt;skills-&gt;getSkillID(i));&lt;br /&gt; packet.addInt(player-&gt;skills-&gt;getSkillLevel(player-&gt;skills-&gt;getSkillID(i)));&lt;br /&gt;}&lt;/player-&gt;&lt;/code&gt;並取代成&lt;code class="c"&gt;packet.addShort(0);&lt;/code&gt;Step 3. 在&lt;code class="c"&gt; packet.addBytes("90633A0DC55DC801");&lt;br /&gt;packet.packetSend(player);&lt;/code&gt;的後面新增&lt;code class="c"&gt; for(int i=0; i&lt;player-&gt;skills-&gt;getSkillsNum(); i++){&lt;br /&gt; SkillsPacket::addSkill(player, player-&gt;skills-&gt;getSkillID(i), player-&gt;skills-&gt;getSkillLevel(player-&gt;skills-&gt;getSkillID(i)));&lt;br /&gt;}&lt;/player-&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;基本上就修改這幾個地方囉! :)&lt;br /&gt;&lt;br /&gt;所以最後看起來應該會像下面這樣&lt;br /&gt;&lt;code class="c"&gt;&lt;s&gt; //Skills&lt;br /&gt;/*&lt;br /&gt;packet.addShort(player-&gt;skills-&gt;getSkillsNum());&lt;br /&gt;for(int i=0; i&lt;player-&gt;skills-&gt;getSkillsNum(); i++){&lt;br /&gt; packet.addInt(player-&gt;skills-&gt;getSkillID(i));&lt;br /&gt; packet.addInt(player-&gt;skills-&gt;getSkillLevel(player-&gt;skills-&gt;getSkillID(i)));&lt;br /&gt;}&lt;/player-&gt;&lt;br /&gt;*/&lt;br /&gt;//End 以上皆刪除&lt;/s&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;packet.addShort(0);&lt;/span&gt; // 我們新增的code&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addInt(0);&lt;br /&gt;packet.addShort(0);&lt;br /&gt;&lt;font color="blue"&gt;for(int i=0; i&lt;15; color="blue"&gt;for(int i=0; i&lt;player-&gt;skills-&gt;getSkillsNum(); i++){&lt;br /&gt; SkillsPacket::addSkill(player, player-&gt;skills-&gt;getSkillID(i), player-&gt;skills-&gt;getSkillLevel(player-&gt;skills-&gt;getSkillID(i)));&lt;br /&gt;}&lt;/font&gt;&lt;/player-&gt;&lt;/span&gt; &lt;/code&gt;這個版本的好處就是,下次登入時四轉技能還在喔~^^ 比起我上個版本要好得多了!&lt;br /&gt;&lt;br /&gt;原文網址：http://forum.ragezone.com/f427/release-fix-logging-characters-have-4th-job-skills-386505/&lt;br /&gt;附註：如果有使用我之前解決無法登入的方法，請至Player.cpp中將 MySQL::delete4thSkills(getPlayerid()); 這段程式碼刪掉即可!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-6650177981189287933?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/6650177981189287933/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=6650177981189287933' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/6650177981189287933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/6650177981189287933'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/tina007.html' title='[T007] 修正使用四轉技能無法登入的問題'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-1949274363067737893</id><published>2008-04-17T01:08:00.000-07:00</published><updated>2008-04-21T19:39:54.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='教學文章'/><category scheme='http://www.blogger.com/atom/ns#' term='原創'/><category scheme='http://www.blogger.com/atom/ns#' term='T007'/><title type='text'>[T007] 讓倉庫管理員變成造型師</title><content type='html'>每次變換髮型,眼睛都要到各地的城市去,還要買卷..實在是太麻煩啦!!&lt;br /&gt;&lt;br /&gt;所以我把倉庫管理員變成造型師囉! 哈哈&lt;br /&gt;&lt;br /&gt;首先確定版本是否吻合喔! 需要修改三個地方 :)&lt;br /&gt;&lt;br /&gt;NPCsScript.h&lt;br /&gt;需要新增下列這兩行程式碼,至於加在哪呢? 看起來跟他一樣的地方就是啦!&lt;br /&gt;隨便找地方插進去!:P&lt;br /&gt;&lt;br /&gt;&lt;font color=red&gt;case 1002005: npc_1002005(npc); break;&lt;br /&gt;static void npc_1002005(NPC* npc);&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;code class="c"&gt;switch(npcid){&lt;br /&gt;   &lt;br /&gt;   // add by squall (change eyes/hair)&lt;br /&gt;   case 1002005: npc_1002005(npc); break; // 把我這行加進去喔~~~&lt;br /&gt;   &lt;br /&gt;   case 2100: npc_2100(npc); break;&lt;br /&gt;   case 2101: npc_2101(npc); break;&lt;br /&gt;   case 2020005: npc_2020005(npc); break;&lt;/code&gt;另外一段在下面~&lt;code class="c"&gt;]private:&lt;br /&gt;        static void npc_1002005(NPC* npc); // 把我這行加進去喔~~~&lt;br /&gt; static void npc_2100(NPC* npc);&lt;br /&gt; static void npc_2101(NPC* npc);&lt;/code&gt;把下面程式碼整段貼到PlasticSurgery.cpp&lt;code class="c"&gt;&lt;s&gt;// add by squall 2008-08-04-14&lt;br /&gt;void NPCsScripts::npc_1002005(NPC* npc){&lt;br /&gt;    int state = npc-&gt;getState();&lt;br /&gt;    int skins[] = {0, 1, 2, 3, 4};&lt;br /&gt;    int hairs[] = {31000, 31010, 31020, 31030, 31040, 31050, 31060, 31070, 31080, 31090, 31100, 31110, 31120, 31130, 31140, 31150, 31160, 31170, 31180, 31190, 31200, 31210, 31220, 31230, 31240, 31250, 31260, 31270, 31280, 31290, 31300, 31310, 31320, 31330, 31340, 31350, 31360, 31370, 31380, 31390, 31400, 31410, 31420, 31430, 31440, 31450, 31460, 31470, 31480, 31490, 31500, 31510, 31520, 31530, 31540, 31550, 31560, 31570, 31580, 31590, 31600, 31610, 31620, 31630, 31640, 31650, 31660, 31670, 31680, 31690, 31700, 31710, 31720, 31730};&lt;br /&gt;    int hairscolor[] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};&lt;br /&gt;    int eyes[] = {21000, 21001, 21002, 21003, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21016, 21017, 21018, 21019, 21020, 21022};&lt;br /&gt;    if(state == 0){&lt;br /&gt;        npc-&gt;addText("#L0#變換膚色#l\r\n#L1#變換髮型#l\r\n#L2#變換髮型顏色#l\r\n#L3#變換眼睛#l\r\n#L4#變換眼睛顏色#l");&lt;br /&gt;        npc-&gt;sendSimple();&lt;br /&gt;    }&lt;br /&gt;    else if(state == 1){&lt;br /&gt;        int type = npc-&gt;getSelected();&lt;br /&gt;        npc-&gt;setVariable("type", type);&lt;br /&gt;        if(type == 0){&lt;br /&gt;            npc-&gt;sendStyle(skins, 5);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 1){&lt;br /&gt;            npc-&gt;sendStyle(hairs, 74);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 2){&lt;br /&gt;            int cur = npc-&gt;getPlayerHair()/10*10;&lt;br /&gt;            int colors[] = {cur, cur+1, cur+2, cur+3, cur+4, cur+5, cur+6, cur+7};&lt;br /&gt;            npc-&gt;sendStyle(colors, hairscolor[npc-&gt;getPlayerHair()%1000/10]);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 3){&lt;br /&gt;            npc-&gt;sendStyle(eyes, 21);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 4){&lt;br /&gt;            int cur = npc-&gt;getPlayerEyes()%100+20000;&lt;br /&gt;            int colors[] = {cur, cur+100, cur+200, cur+300, cur+400, cur+500, cur+600, cur+700};&lt;br /&gt;            npc-&gt;sendStyle(colors, 8);&lt;br /&gt;        }&lt;br /&gt;        else{&lt;br /&gt;            npc-&gt;end();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else if(state == 2){&lt;br /&gt;        npc-&gt;end();&lt;br /&gt;        int type = npc-&gt;getVariable("type");&lt;br /&gt;        if(type == 0){&lt;br /&gt;            npc-&gt;setStyle(skins[npc-&gt;getSelected()]);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 1){&lt;br /&gt;            npc-&gt;setStyle(hairs[npc-&gt;getSelected()]);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 2){&lt;br /&gt;            npc-&gt;setStyle(npc-&gt;getPlayerHair()/10*10 + npc-&gt;getSelected());&lt;br /&gt;        }&lt;br /&gt;        else if(type == 3){&lt;br /&gt;            npc-&gt;setStyle(eyes[npc-&gt;getSelected()]);&lt;br /&gt;        }&lt;br /&gt;        else if(type == 4){&lt;br /&gt;            npc-&gt;setStyle(20000+npc-&gt;getPlayerEyes()%100 + npc-&gt;getSelected()*100);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;            npc-&gt;setStyle(eyes[npc-&gt;getSelected()]);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/s&gt;&lt;/code&gt;&lt;br /&gt;更新版：&lt;code class="c"&gt;&lt;br /&gt;&lt;br /&gt;// add by squall 2008-08-04-14&lt;br /&gt;void NPCsScripts::npc_1002005(NPC* npc){&lt;br /&gt;int state = npc-&gt;getState();&lt;br /&gt;int skins[] = {0, 1, 2, 3, 4};&lt;br /&gt;int hairs[] = {31000, 31010, 31020, 31030, 31040, 31050, 31060, 31070, 31080, 31090, 31100, 31110, 31120, 31130, 31140, 31150, 31160, 31170, 31180, 31190, 31200, 31210, 31220, 31230, 31240, 31250, 31260, 31270, 31280, 31290, 31300, 31310, 31320, 31330, 31340, 31350, 31400, 31410, 31420, 31430, 31440, 31450, 31460, 31470, 31480, 31490, 31510, 31520, 31530, 31540, 31550, 31560, 31570, 31580, 31590, 31600, 31610, 31620, 31630, 31640, 31650, 31680, 31690, 31700, 31710, 31720, 31730};&lt;br /&gt;int hairscolor[] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};&lt;br /&gt;int eyes[] = {21000, 21001, 21002, 21003, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21016, 21017, 21018, 21019, 21020, 21022};&lt;br /&gt;if(state == 0){&lt;br /&gt; npc-&gt;addText("#L0#變換膚色#l\r\n#L1#變換髮型#l\r\n#L2#變換髮型顏色#l\r\n#L3#變換眼睛#l\r\n#L4#變換眼睛顏色#l");&lt;br /&gt; npc-&gt;sendSimple();&lt;br /&gt;}&lt;br /&gt;else if(state == 1){&lt;br /&gt;int type = npc-&gt;getSelected();&lt;br /&gt;npc-&gt;setVariable("type", type);&lt;br /&gt;if(type == 0){&lt;br /&gt;npc-&gt;sendStyle(skins, 5);&lt;br /&gt;}&lt;br /&gt;else if(type == 1){&lt;br /&gt;npc-&gt;sendStyle(hairs, 67);&lt;br /&gt;}&lt;br /&gt;else if(type == 2){&lt;br /&gt;int cur = npc-&gt;getPlayerHair()/10*10;&lt;br /&gt;int colors[] = {cur, cur+1, cur+2, cur+3, cur+4, cur+5, cur+6, cur+7};&lt;br /&gt;npc-&gt;sendStyle(colors, hairscolor[npc-&gt;getPlayerHair()%1000/10]);&lt;br /&gt;} &lt;br /&gt;else if(type == 3){&lt;br /&gt;npc-&gt;sendStyle(eyes, 21);&lt;br /&gt;}&lt;br /&gt;else if(type == 4){&lt;br /&gt;int cur = npc-&gt;getPlayerEyes()%100+20000;&lt;br /&gt;int colors[] = {cur, cur+100, cur+200, cur+300, cur+400, cur+500, cur+600, cur+700};&lt;br /&gt;npc-&gt;sendStyle(colors, 8);&lt;br /&gt;}&lt;br /&gt;else{&lt;br /&gt;npc-&gt;end();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else if(state == 2){&lt;br /&gt;npc-&gt;end();&lt;br /&gt;int type = npc-&gt;getVariable("type");&lt;br /&gt;if(type == 0){&lt;br /&gt;npc-&gt;setStyle(skins[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;else if(type == 1){&lt;br /&gt;npc-&gt;setStyle(hairs[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;else if(type == 2){&lt;br /&gt;npc-&gt;setStyle(npc-&gt;getPlayerHair()/10*10 + npc-&gt;getSelected());&lt;br /&gt;}&lt;br /&gt;else if(type == 3){&lt;br /&gt;npc-&gt;setStyle(eyes[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;else if(type == 4){&lt;br /&gt;npc-&gt;setStyle(20000+npc-&gt;getPlayerEyes()%100 + npc-&gt;getSelected()*100);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;npc-&gt;setStyle(eyes[npc-&gt;getSelected()]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;這樣就完成啦,以後只要找到倉庫管理員,就可以變換造型囉!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-1949274363067737893?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/1949274363067737893/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=1949274363067737893' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/1949274363067737893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/1949274363067737893'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/blog-post_17.html' title='[T007] 讓倉庫管理員變成造型師'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-1505274270375960306</id><published>2008-04-17T00:51:00.000-07:00</published><updated>2008-04-17T00:54:32.885-07:00</updated><title type='text'>版權聲明</title><content type='html'>未註明出處的文章皆為原創，請勿任意轉載，如需轉載也請跟我說一聲&lt;br /&gt;&lt;br /&gt;非原創文章,會加上原出處，如果有任何侵犯到的地方請馬上告知，我會在第一時間撤除&lt;br /&gt;&lt;br /&gt;Blog內容僅供學術用途，請勿作任何非法使用&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-1505274270375960306?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/1505274270375960306/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=1505274270375960306' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/1505274270375960306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/1505274270375960306'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/blog-post.html' title='版權聲明'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-643741689426516243.post-6617496588660985039</id><published>2008-04-15T01:40:00.000-07:00</published><updated>2008-04-17T08:08:41.851-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='教學文章'/><category scheme='http://www.blogger.com/atom/ns#' term='原創'/><category scheme='http://www.blogger.com/atom/ns#' term='T007'/><title type='text'>[T007] 解決四轉技能無法重登的問題 (治標不治本)</title><content type='html'>相信大家都想要擁有四轉技能...不過偏偏伺服器不夠完整!&lt;br /&gt;&lt;br /&gt;每次玩完就要刪除..實在是很麻煩!!&lt;br /&gt;&lt;br /&gt;所以啦~在還沒真正解決四轉技能為何會造成無法登入之前..先簡單寫個鳥程式來解決吧!XD&lt;br /&gt;&lt;br /&gt;首先開啟MySQLM.cpp,找個你喜歡的地方將下面的程式碼貼上&lt;br /&gt;&lt;code class="c"&gt;//add by squall&lt;br /&gt;void MySQL::delete4thSkills(int id){&lt;br /&gt; char query[500]; &lt;br /&gt; sprintf_s(query, 500, "DELETE FROM skills WHERE charid='%d' AND (skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s' OR skillid LIKE '%s');", id, "112%","122%","132%","212%","222%","232%","312%","412%","422%");&lt;br /&gt; mysql_real_query(&amp;maple_db, query, strlen(query));&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;在MySQLM.h加入&lt;br /&gt;&lt;code class="c"&gt;static void delete4thSkills(int id);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;最後在Player.cpp中加入&lt;br /&gt;&lt;code class="c"&gt;//add by squall (delete 4thJob Skills)&lt;br /&gt;MySQL::delete4thSkills(getPlayerid());&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;這邊有一個地方要注意的,必須放在取得技能之前,所以建議放在[color=Red]int skill[200][2];[/color]的下面一行...&lt;br /&gt;看起來如下&lt;br /&gt;&lt;code class="c"&gt;int skill[200][2]; &lt;br /&gt;//add by squall (delete 4thJob Skills)&lt;br /&gt;MySQL::delete4thSkills(getPlayerid()); // 這段是新加進去的唷!!&lt;br /&gt;many = MySQL::getSkills(getPlayerid(), skill);&lt;/code&gt;好啦~這樣每次玩遊戲都可以放心的玩四轉技能囉! 不過還是希望盡快找出四轉技能會當機的問題...囧!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;==================補充說明==================&lt;br /&gt;&lt;br /&gt;看樣子大家似乎都有遇到類似的問題&lt;br /&gt;&lt;br /&gt;是Player.CPP不是Players.CPP&lt;br /&gt;&lt;br /&gt;所以可能要請大家找 many = MySQL::getSkills(getPlayerid(), skill); 或是 getSkills&lt;br /&gt;&lt;br /&gt;只要把MySQL::delete4thSkills(getPlayerid()); 這段放在取得技能之前即可&lt;br /&gt;&lt;br /&gt;類似這樣...大家在努力試試看吧! :)&lt;code class="c"&gt; for(int i=0; i&lt;many; i++){&lt;br /&gt;  Item* item = new Item;&lt;br /&gt;  item-&gt;id = items[i][0];&lt;br /&gt;  item-&gt;inv = items[i][1];&lt;br /&gt;  item-&gt;pos = items[i][2];&lt;br /&gt;  item-&gt;amount = items[i][3];&lt;br /&gt;  inv-&gt;addItem(item);&lt;br /&gt; }&lt;br /&gt; int skill[200][2];&lt;br /&gt; &lt;br /&gt; //add by squall (delete 4thJob Skills)&lt;br /&gt; MySQL::delete4thSkills(getPlayerid());&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; many = MySQL::getSkills(getPlayerid(), skill);&lt;br /&gt; &lt;br /&gt; for(int i=0; i&lt;many; i++){&lt;br /&gt;  skills-&gt;addSkillLevel(skill[i][0], skill[i][1]);&lt;br /&gt;  //SkillsPacket::addSkill(this, skill[i][0] , skills-&gt;getSkillLevel(skill[i][0]));  &lt;br /&gt; }&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/643741689426516243-6617496588660985039?l=training-ms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://training-ms.blogspot.com/feeds/6617496588660985039/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=643741689426516243&amp;postID=6617496588660985039' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/6617496588660985039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/643741689426516243/posts/default/6617496588660985039'/><link rel='alternate' type='text/html' href='http://training-ms.blogspot.com/2008/04/titan007.html' title='[T007] 解決四轉技能無法重登的問題 (治標不治本)'/><author><name>squall</name><uri>http://www.blogger.com/profile/11310920671178930327</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3yIh9bU0SFI/R-kf310ulhI/AAAAAAAABRo/x2VCQ1tRFfU/S220/index.jpg'/></author><thr:total>0</thr:total></entry></feed>
